From 5101fdd6c84e480e813512374f4a1af6a8409baf Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Mon, 7 Feb 2022 12:01:10 +0800 Subject: [PATCH] feat(nvue): navigator --- packages/uni-components/dist/components.js | 29 +++++++++++++++---- .../src/nvue/navigator/index.tsx | 14 +++++++-- packages/uni-components/src/nvue/utils.ts | 26 ++++++++++++++--- 3 files changed, 58 insertions(+), 11 deletions(-) diff --git a/packages/uni-components/dist/components.js b/packages/uni-components/dist/components.js index c0c710665..4eed33a78 100644 --- a/packages/uni-components/dist/components.js +++ b/packages/uni-components/dist/components.js @@ -81,21 +81,40 @@ export function initComponents(uni, Vue, weex) { } }; } - function useHoverClass(hoverClass) { - if (hoverClass && hoverClass !== "none") { - return {}; + const hasOwnProperty = Object.prototype.hasOwnProperty; + const hasOwn = (val, key) => hasOwnProperty.call(val, key); + function useHoverClass(props) { + if (props.hoverClass && props.hoverClass !== "none") { + const hoverAttrs = { hoverClass: props.hoverClass }; + if (hasOwn(props, "hoverStartTime")) { + hoverAttrs.hoverStartTime = props.hoverStartTime; + } + if (hasOwn(props, "hoverStayTime")) { + hoverAttrs.hoverStayTime = props.hoverStayTime; + } + if (hasOwn(props, "hoverStopPropagation")) { + hoverAttrs.hoverStopPropagation = props.hoverStopPropagation; + } + return hoverAttrs; } - return { hoverClass }; + return {}; } + const navigatorStyles = [{ + "navigator-hover": { + backgroundColor: "rgba(0,0,0,0.1)", + opacity: 0.7 + } + }]; var Navigator = vue.defineComponent({ name: "Navigator", props: navigatorProps, + styles: navigatorStyles, setup(props, { slots }) { const onClick = createNavigatorOnClick(props); return () => { - return vue.createVNode("div", vue.mergeProps(useHoverClass(props.hoverClass), { + return vue.createVNode("view", vue.mergeProps(useHoverClass(props), { "onClick": onClick }), [slots.default && slots.default()]); }; diff --git a/packages/uni-components/src/nvue/navigator/index.tsx b/packages/uni-components/src/nvue/navigator/index.tsx index 69884d21b..10c6de48a 100644 --- a/packages/uni-components/src/nvue/navigator/index.tsx +++ b/packages/uni-components/src/nvue/navigator/index.tsx @@ -5,16 +5,26 @@ import { } from '../../components/navigator' import { useHoverClass } from '../utils' +const navigatorStyles: Record>[] = [ + { + 'navigator-hover': { + backgroundColor: 'rgba(0,0,0,0.1)', + opacity: 0.7, + }, + }, +] + export default defineComponent({ name: 'Navigator', props: navigatorProps, + styles: navigatorStyles, setup(props, { slots }) { const onClick = createNavigatorOnClick(props) return () => { return ( -
+ {slots.default && slots.default()} -
+ ) } }, diff --git a/packages/uni-components/src/nvue/utils.ts b/packages/uni-components/src/nvue/utils.ts index ddc75301e..cc359c679 100644 --- a/packages/uni-components/src/nvue/utils.ts +++ b/packages/uni-components/src/nvue/utils.ts @@ -1,6 +1,24 @@ -export function useHoverClass(hoverClass: string) { - if (hoverClass && hoverClass !== 'none') { - return {} +import { hasOwn } from '@vue/shared' + +interface HoverProps { + hoverClass?: string + hoverStartTime?: number | string + hoverStayTime?: number | string + hoverStopPropagation?: boolean +} +export function useHoverClass(props: HoverProps) { + if (props.hoverClass && props.hoverClass !== 'none') { + const hoverAttrs: HoverProps = { hoverClass: props.hoverClass } + if (hasOwn(props, 'hoverStartTime')) { + hoverAttrs.hoverStartTime = props.hoverStartTime + } + if (hasOwn(props, 'hoverStayTime')) { + hoverAttrs.hoverStayTime = props.hoverStayTime + } + if (hasOwn(props, 'hoverStopPropagation')) { + hoverAttrs.hoverStopPropagation = props.hoverStopPropagation + } + return hoverAttrs } - return { hoverClass } + return {} } -- GitLab