UNPKG

tdesign-mobile-vue

Version:
1 lines 13.8 kB
{"version":3,"file":"fab.mjs","sources":["../../src/fab/fab.tsx"],"sourcesContent":["import { defineComponent, ref, computed, onMounted, watch } from 'vue';\nimport config from '../config';\nimport FabProps from './props';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass } from '../hooks/useClass';\nimport TButton from '../button';\nimport { TdFabProps } from './type';\n\nconst { prefix } = config;\n\nconst getNumber = (num: string) => num.replace(/[^\\d]/g, '');\n\nexport default defineComponent({\n name: `${prefix}-fab`,\n props: FabProps,\n setup(props) {\n const renderTNodeJSX = useTNodeJSX();\n\n const fabClass = usePrefixClass('fab');\n const fabRef = ref();\n const fabButtonRef = ref();\n\n const handleClick = (e: MouseEvent) => {\n props.onClick?.({ e });\n };\n\n const mounted = ref(false);\n const fabButtonSize = ref({\n width: 48,\n height: 48,\n });\n const btnSwitchPos = ref({\n x: 16,\n y: 32,\n });\n const switchPos = ref({\n hasMoved: false, // exclude click event\n x: btnSwitchPos.value.x, // right\n y: btnSwitchPos.value.y, // bottom\n startX: 0,\n startY: 0,\n endX: 0,\n endY: 0,\n });\n\n const onTouchStart = (e: TouchEvent) => {\n switchPos.value.startX = e.touches[0].pageX;\n switchPos.value.startY = e.touches[0].pageY;\n };\n\n const onTouchMove = (e: TouchEvent) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (!props.draggable) {\n return;\n }\n\n if (e.touches.length <= 0) {\n return;\n }\n const offsetX = e.touches[0].pageX - switchPos.value.startX;\n const offsetY = e.touches[0].pageY - switchPos.value.startY;\n let x = Math.floor(switchPos.value.x - offsetX);\n let y = Math.floor(switchPos.value.y - offsetY);\n [x, y] = getSwitchButtonSafeAreaXY(x, y);\n btnSwitchPos.value.x = x;\n btnSwitchPos.value.y = y;\n switchPos.value.endX = x;\n switchPos.value.endY = y;\n switchPos.value.hasMoved = true;\n };\n\n const getSwitchButtonSafeAreaXY = (x: number, y: number) => {\n const bottomThreshold = 0;\n const top = 0;\n const windowTop = 0;\n const windowBottom = 0;\n const windowWidth = Math.min(window.innerWidth, document.documentElement.clientWidth, screen.width);\n const windowHeight = Math.min(window.innerHeight, document.documentElement.clientHeight, screen.height);\n const docWidth = windowWidth;\n const docHeight = windowHeight - top;\n\n // check edge\n if (x + fabButtonSize.value.width > docWidth) {\n x = docWidth - fabButtonSize.value.width;\n }\n if (y + fabButtonSize.value.height - windowTop > docHeight) {\n y = docHeight - fabButtonSize.value.height + windowTop;\n }\n\n if (x < 0) {\n x = 0;\n }\n if (y < bottomThreshold + windowBottom) {\n y = bottomThreshold + windowBottom;\n }\n // safe area for iOS Home indicator\n return [x, y];\n };\n\n const onTouchEnd = (e: TouchEvent) => {\n if (!switchPos.value.hasMoved) {\n return;\n }\n switchPos.value.startX = 0;\n switchPos.value.startY = 0;\n switchPos.value.hasMoved = false;\n setSwitchPosition(switchPos.value.endX, switchPos.value.endY);\n };\n\n const setSwitchPosition = (switchX: number, switchY: number) => {\n [switchX, switchY] = getSwitchButtonSafeAreaXY(switchX, switchY);\n switchPos.value.x = switchX;\n switchPos.value.y = switchY;\n btnSwitchPos.value.x = switchX;\n btnSwitchPos.value.y = switchY;\n };\n\n const fabStyle = computed(() => ({\n right: `${btnSwitchPos.value.x}px`,\n bottom: `${btnSwitchPos.value.y}px`,\n }));\n\n onMounted(() => {\n mounted.value = true;\n resetDraggableParams();\n\n const info = window.getComputedStyle(fabButtonRef.value.$el);\n fabButtonSize.value.height = +getNumber(info.height);\n fabButtonSize.value.width = +getNumber(info.width);\n });\n\n const getFabOriginStyle = () => {\n const info = window.getComputedStyle(fabRef.value);\n const { right, bottom } = info || {};\n\n return {\n right: +(getNumber(right) || 0),\n bottom: +(getNumber(bottom) || 0),\n };\n };\n\n const resetDraggableParams = () => {\n const { right, bottom } = getFabOriginStyle();\n\n btnSwitchPos.value.x = right;\n btnSwitchPos.value.y = bottom;\n\n switchPos.value.x = right;\n switchPos.value.y = bottom;\n };\n\n watch(\n () => props.style,\n () => {\n resetDraggableParams();\n },\n );\n\n return () => {\n const icon = () => renderTNodeJSX('icon');\n return (\n <div\n class={fabClass.value}\n style={mounted.value && props.draggable ? { ...fabStyle.value } : props.style}\n onClick={handleClick}\n onTouchstart={onTouchStart}\n onTouchmove={onTouchMove}\n onTouchend={onTouchEnd}\n ref={fabRef}\n >\n <TButton\n size=\"large\"\n theme=\"primary\"\n shape={props.text ? 'round' : 'circle'}\n class={`${fabClass.value}__button`}\n {...(props.buttonProps as TdFabProps['buttonProps'])}\n icon={icon}\n ref={fabButtonRef}\n >\n {props.text}\n </TButton>\n </div>\n );\n };\n },\n});\n"],"names":["prefix","config","getNumber","num","replace","defineComponent","name","props","FabProps","setup","renderTNodeJSX","useTNodeJSX","fabClass","usePrefixClass","fabRef","ref","fabButtonRef","handleClick","e","_props$onClick","onClick","call","mounted","fabButtonSize","width","height","btnSwitchPos","x","y","switchPos","hasMoved","value","startX","startY","endX","endY","onTouchStart","touches","pageX","pageY","onTouchMove","stopPropagation","preventDefault","draggable","length","offsetX","offsetY","Math","floor","_getSwitchButtonSafeA","getSwitchButtonSafeAreaXY","_getSwitchButtonSafeA2","_slicedToArray","bottomThreshold","top","windowTop","windowBottom","windowWidth","min","window","innerWidth","document","documentElement","clientWidth","screen","windowHeight","innerHeight","clientHeight","docWidth","docHeight","onTouchEnd","setSwitchPosition","switchX","switchY","_getSwitchButtonSafeA3","_getSwitchButtonSafeA4","fabStyle","computed","right","concat","bottom","onMounted","resetDraggableParams","info","getComputedStyle","$el","getFabOriginStyle","_ref","_getFabOriginStyle","watch","style","icon","_createVNode","_objectSpread","text","buttonProps"],"mappings":"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"}