@tarojs/components-react 4.2.1-beta.0 → 4.2.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/image/index.js +5 -3
- package/dist/components/image/index.js.map +1 -1
- package/dist/components/map/MapContext.js +628 -0
- package/dist/components/map/MapContext.js.map +1 -0
- package/dist/components/map/MapCustomCallout.js +91 -0
- package/dist/components/map/MapCustomCallout.js.map +1 -0
- package/dist/components/map/common.js +4 -0
- package/dist/components/map/common.js.map +1 -0
- package/dist/components/map/createMapContext.js +34 -0
- package/dist/components/map/createMapContext.js.map +1 -0
- package/dist/components/map/handler.js +50 -0
- package/dist/components/map/handler.js.map +1 -0
- package/dist/components/map/index.js +329 -0
- package/dist/components/map/index.js.map +1 -0
- package/dist/components/picker/index.js +76 -35
- package/dist/components/picker/index.js.map +1 -1
- package/dist/components/picker/picker-group.js +477 -127
- package/dist/components/picker/picker-group.js.map +1 -1
- package/dist/components/refresher/index.js +5 -5
- package/dist/components/refresher/index.js.map +1 -1
- package/dist/components/scroll-view/index.js +80 -36
- package/dist/components/scroll-view/index.js.map +1 -1
- package/dist/components/switch/index.js +125 -0
- package/dist/components/switch/index.js.map +1 -0
- package/dist/components/switch/style/index.scss.js +4 -0
- package/dist/components/switch/style/index.scss.js.map +1 -0
- package/dist/contexts/ScrollElementContext.js +6 -0
- package/dist/contexts/ScrollElementContext.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/original/components/image/index.js +5 -3
- package/dist/original/components/image/index.js.map +1 -1
- package/dist/original/components/image/style/index.scss +5 -1
- package/dist/original/components/map/MapContext.js +628 -0
- package/dist/original/components/map/MapContext.js.map +1 -0
- package/dist/original/components/map/MapCustomCallout.js +91 -0
- package/dist/original/components/map/MapCustomCallout.js.map +1 -0
- package/dist/original/components/map/common.js +4 -0
- package/dist/original/components/map/common.js.map +1 -0
- package/dist/original/components/map/createMapContext.js +34 -0
- package/dist/original/components/map/createMapContext.js.map +1 -0
- package/dist/original/components/map/handler.js +50 -0
- package/dist/original/components/map/handler.js.map +1 -0
- package/dist/original/components/map/index.js +329 -0
- package/dist/original/components/map/index.js.map +1 -0
- package/dist/original/components/picker/index.js +76 -35
- package/dist/original/components/picker/index.js.map +1 -1
- package/dist/original/components/picker/picker-group.js +477 -127
- package/dist/original/components/picker/picker-group.js.map +1 -1
- package/dist/original/components/picker/style/index.scss +9 -8
- package/dist/original/components/refresher/index.js +5 -5
- package/dist/original/components/refresher/index.js.map +1 -1
- package/dist/original/components/scroll-view/index.js +80 -36
- package/dist/original/components/scroll-view/index.js.map +1 -1
- package/dist/original/components/switch/index.js +125 -0
- package/dist/original/components/switch/index.js.map +1 -0
- package/dist/original/components/switch/style/index.scss +35 -0
- package/dist/original/contexts/ScrollElementContext.js +6 -0
- package/dist/original/contexts/ScrollElementContext.js.map +1 -0
- package/dist/original/index.js +6 -2
- package/dist/original/index.js.map +1 -1
- package/dist/solid/components/image/index.js +5 -3
- package/dist/solid/components/image/index.js.map +1 -1
- package/dist/solid/components/picker/index.js +82 -39
- package/dist/solid/components/picker/index.js.map +1 -1
- package/dist/solid/components/picker/picker-group.js +500 -151
- package/dist/solid/components/picker/picker-group.js.map +1 -1
- package/dist/solid/components/refresher/index.js +5 -5
- package/dist/solid/components/refresher/index.js.map +1 -1
- package/dist/solid/components/scroll-view/index.js +84 -40
- package/dist/solid/components/scroll-view/index.js.map +1 -1
- package/dist/solid/contexts/ScrollElementContext.js +6 -0
- package/dist/solid/contexts/ScrollElementContext.js.map +1 -0
- package/dist/solid/index.css +1 -1
- package/dist/solid/index.js +1 -1
- package/package.json +8 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker-group.js","sources":["../../../src/components/picker/picker-group.tsx"],"sourcesContent":["import { ScrollView, View } from '@tarojs/components'\nimport Taro from '@tarojs/taro'\nimport * as React from 'react'\n\n// 添加类型定义\ntype TaroScrollView = React.ElementRef<typeof ScrollView>\ntype TaroView = React.ElementRef<typeof View>\n\nexport interface PickerGroupProps {\n mode?: 'basic' | 'time' | 'date' | 'region'\n range: any[]\n rangeKey?: string\n columnId: string\n updateIndex: (index: number, columnId: string, needRevise?: boolean, isUserBeginScroll?: boolean) => void // 替换updateHeight\n onColumnChange?: (e: { columnId: string, index: number }) => void // 修改回调参数名称\n updateDay?: (value: number, fields: number) => void\n selectedIndex?: number // 添加selectedIndex参数\n _updateTrigger?: any // 仅用于强制触发更新\n colors?: {\n itemDefaultColor?: string // 选项字体默认颜色\n itemSelectedColor?: string // 选项字体选中颜色\n lineColor?: string // 选中指示线颜色\n }\n}\n\n// 定义常量\nconst PICKER_LINE_HEIGHT = 34 // px\nconst PICKER_VISIBLE_ITEMS = 7 // 可见行数\nconst PICKER_BLANK_ITEMS = 3 // 空白行数\n\nconst getIndicatorStyle = (lineColor: string): React.CSSProperties => {\n return {\n borderTopColor: lineColor,\n borderBottomColor: lineColor\n }\n}\n\n// 辅助函数:获取系统信息的 lengthScaleRatio 并设置 targetScrollTop\nconst setTargetScrollTopWithScale = (\n setTargetScrollTop: (value: number) => void,\n baseValue: number,\n randomOffset?: number\n) => {\n // H5 和 weapp 不参与放大计算,直接使用 baseValue\n if (process.env.TARO_ENV === 'h5' || process.env.TARO_ENV === 'weapp') {\n const finalValue = randomOffset !== undefined ? baseValue + randomOffset : baseValue\n setTargetScrollTop(finalValue)\n return\n }\n\n Taro.getSystemInfo({\n success: (res) => {\n let lengthScaleRatio = (res as any)?.lengthScaleRatio\n if (lengthScaleRatio == null || lengthScaleRatio === 0) {\n console.warn('Taro.getSystemInfo: lengthScaleRatio 不存在,使用计算值')\n lengthScaleRatio = 1\n if (res.windowWidth < 320) {\n lengthScaleRatio = res.windowWidth / 320\n } else if (res.windowWidth >= 400 && res.windowWidth < 600) {\n lengthScaleRatio = res.windowWidth / 400\n }\n const shortSide = res.windowWidth < res.windowHeight ? res.windowWidth : res.windowHeight\n const isBigScreen = shortSide >= 600\n if (isBigScreen) {\n lengthScaleRatio = shortSide / 720\n }\n }\n const scaledValue = baseValue * lengthScaleRatio\n const finalValue = randomOffset !== undefined ? scaledValue + randomOffset : scaledValue\n setTargetScrollTop(finalValue)\n },\n fail: (err) => {\n console.error('获取系统信息失败:', err)\n // 失败时使用默认值 1\n const finalValue = randomOffset !== undefined ? baseValue + randomOffset : baseValue\n setTargetScrollTop(finalValue)\n }\n })\n}\n\nexport function PickerGroupBasic(props: PickerGroupProps) {\n const {\n range = [],\n rangeKey,\n columnId,\n updateIndex,\n onColumnChange,\n selectedIndex = 0, // 使用selectedIndex参数,默认为0\n colors = {},\n } = props\n const indicatorStyle = colors.lineColor ? getIndicatorStyle(colors.lineColor) : null\n const [targetScrollTop, setTargetScrollTop] = React.useState(0)\n const scrollViewRef = React.useRef<TaroScrollView>(null)\n const itemRefs = React.useRef<Array<TaroView | null>>([])\n // 使用selectedIndex初始化当前索引\n const [currentIndex, setCurrentIndex] = React.useState(selectedIndex)\n // 触摸状态用于优化用户体验\n const [isTouching, setIsTouching] = React.useState(false)\n\n const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT)\n React.useEffect(() => {\n if (process.env.TARO_PLATFORM !== 'harmony') {\n if (scrollViewRef.current && scrollViewRef.current?.scrollHeight) {\n itemHeightRef.current = scrollViewRef.current.scrollHeight / scrollViewRef.current.childNodes.length\n } else {\n console.warn('Height measurement anomaly')\n }\n }\n }, [range.length]) // 只在range长度变化时重新计算\n // 获取选中的索引\n const getSelectedIndex = (scrollTop: number) => {\n return Math.round(scrollTop / itemHeightRef.current)\n }\n\n // 当selectedIndex变化时,调整滚动位置\n React.useEffect(() => {\n if (scrollViewRef.current && range.length > 0 && !isTouching) {\n const baseValue = selectedIndex * itemHeightRef.current\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue)\n setCurrentIndex(selectedIndex)\n }\n }, [selectedIndex, range])\n\n // 是否处于归中状态\n const isCenterTimerId = React.useRef<NodeJS.Timeout | null>(null)\n // 简化为直接在滚动结束时通知父组件\n const handleScrollEnd = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n // 做一个0.1s延时 0.1s之内没有新的滑动 则把选项归到中间 然后更新选中项\n isCenterTimerId.current = setTimeout(() => {\n if (!scrollViewRef.current) return\n\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop)\n\n setIsTouching(false)\n const baseValue = newIndex * itemHeightRef.current\n const randomOffset = Math.random() * 0.001 // 随机数为了在一个项内滚动时强制刷新\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, randomOffset)\n updateIndex(newIndex, columnId)\n onColumnChange?.({ columnId, index: newIndex })\n isCenterTimerId.current = null\n }, 100)\n }\n // 滚动处理 - 在滚动时计算索引然后更新选中项样式\n const handleScroll = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop)\n if (newIndex !== currentIndex) {\n setCurrentIndex(newIndex)\n }\n }\n\n // 渲染选项\n const pickerItem = range.map((item, index) => {\n const content = rangeKey && item && typeof item === 'object' ? item[rangeKey] : item\n\n return (\n <View\n id={`picker-item-${columnId}-${index}`}\n key={index}\n ref={(el) => (itemRefs.current[index] = el)}\n className={`taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`}\n style={{\n height: PICKER_LINE_HEIGHT,\n color: index === currentIndex\n ? (colors.itemSelectedColor || undefined)\n : (colors.itemDefaultColor || undefined)\n }}\n >\n {content}\n </View>\n )\n })\n\n const realPickerItems = [\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-top-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ...pickerItem,\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-bottom-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ]\n\n return (\n <View className=\"taro-picker__group\">\n <View className=\"taro-picker__mask\" />\n <View\n className=\"taro-picker__indicator\"\n {...(indicatorStyle ? { style: indicatorStyle } : {})}\n />\n <ScrollView\n ref={scrollViewRef}\n scrollY\n showScrollbar={false}\n className=\"taro-picker__content\"\n style={{\n height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS,\n }}\n scrollTop={targetScrollTop}\n onScroll={handleScroll}\n onTouchStart={() => setIsTouching(true)}\n onScrollEnd={handleScrollEnd}\n scrollWithAnimation\n >\n {realPickerItems}\n </ScrollView>\n </View>\n )\n}\n\n// 时间选择器实现\nexport function PickerGroupTime(props: PickerGroupProps) {\n const {\n range = [],\n rangeKey,\n columnId,\n updateIndex,\n selectedIndex = 0,\n colors = {},\n } = props\n\n const indicatorStyle = colors.lineColor ? getIndicatorStyle(colors.lineColor) : null\n const [targetScrollTop, setTargetScrollTop] = React.useState(0)\n const scrollViewRef = React.useRef<TaroScrollView>(null)\n const itemRefs = React.useRef<Array<TaroView | null>>([])\n const [currentIndex, setCurrentIndex] = React.useState(selectedIndex)\n const [isTouching, setIsTouching] = React.useState(false)\n\n const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT)\n React.useEffect(() => {\n if (process.env.TARO_PLATFORM !== 'harmony') {\n if (scrollViewRef.current && scrollViewRef.current?.scrollHeight) {\n itemHeightRef.current = scrollViewRef.current.scrollHeight / scrollViewRef.current.childNodes.length\n } else {\n console.warn('Height measurement anomaly')\n }\n }\n }, [range.length]) // 只在range长度变化时重新计算\n\n const getSelectedIndex = (scrollTop: number) => {\n return Math.round(scrollTop / itemHeightRef.current)\n }\n\n // 当selectedIndex变化时,调整滚动位置\n React.useEffect(() => {\n if (scrollViewRef.current && range.length > 0 && !isTouching) {\n const baseValue = selectedIndex * itemHeightRef.current\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue)\n setCurrentIndex(selectedIndex)\n }\n }, [selectedIndex, range])\n\n // 是否处于归中状态\n const isCenterTimerId = React.useRef<NodeJS.Timeout | null>(null)\n\n // 简化为直接在滚动结束时通知父组件\n const handleScrollEnd = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n // 做一个0.1s延时 0.1s之内没有新的滑动 则把选项归到中间 然后更新选中项\n isCenterTimerId.current = setTimeout(() => {\n if (!scrollViewRef.current) return\n\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop)\n setIsTouching(false)\n // 调用updateIndex执行限位逻辑,获取是否触发了限位\n const isLimited = Boolean(updateIndex(newIndex, columnId, true))\n // 如果没有触发限位,才执行归中逻辑\n if (!isLimited) {\n const baseValue = newIndex * itemHeightRef.current\n const randomOffset = Math.random() * 0.001\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, randomOffset)\n }\n isCenterTimerId.current = null\n }, 100)\n }\n\n // 滚动处理\n const handleScroll = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop)\n if (newIndex !== currentIndex) {\n setCurrentIndex(newIndex)\n }\n }\n\n // 渲染选项\n const pickerItem = range.map((item, index) => {\n const content = rangeKey && item && typeof item === 'object' ? item[rangeKey] : item\n\n return (\n <View\n id={`picker-item-${columnId}-${index}`}\n key={index}\n ref={(el) => (itemRefs.current[index] = el)}\n className={`taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`}\n style={{\n height: PICKER_LINE_HEIGHT,\n color: index === currentIndex\n ? (colors.itemSelectedColor || undefined)\n : (colors.itemDefaultColor || undefined)\n }}\n >\n {content}\n </View>\n )\n })\n\n const realPickerItems = [\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-top-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ...pickerItem,\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-bottom-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ]\n\n return (\n <View className=\"taro-picker__group\">\n <View className=\"taro-picker__mask\" />\n <View\n className=\"taro-picker__indicator\"\n {...(indicatorStyle ? { style: indicatorStyle } : {})}\n />\n <ScrollView\n ref={scrollViewRef}\n scrollY\n showScrollbar={false}\n className=\"taro-picker__content\"\n style={{\n height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS,\n }}\n scrollTop={targetScrollTop}\n onScroll={handleScroll}\n onTouchStart={() => setIsTouching(true)}\n onScrollEnd={handleScrollEnd}\n scrollWithAnimation\n >\n {realPickerItems}\n </ScrollView>\n </View>\n )\n}\n\n// 日期选择器实现\nexport function PickerGroupDate(props: PickerGroupProps) {\n const {\n range = [],\n columnId,\n updateDay,\n selectedIndex = 0,\n colors = {},\n } = props\n\n const indicatorStyle = colors.lineColor ? getIndicatorStyle(colors.lineColor) : null\n const [targetScrollTop, setTargetScrollTop] = React.useState(0)\n const scrollViewRef = React.useRef<TaroScrollView>(null)\n const [currentIndex, setCurrentIndex] = React.useState(selectedIndex)\n const [isTouching, setIsTouching] = React.useState(false)\n\n const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT)\n React.useEffect(() => {\n if (process.env.TARO_PLATFORM !== 'harmony') {\n if (scrollViewRef.current && scrollViewRef.current?.scrollHeight) {\n itemHeightRef.current = scrollViewRef.current.scrollHeight / scrollViewRef.current.childNodes.length\n } else {\n console.warn('Height measurement anomaly')\n }\n }\n }, [range.length]) // 只在range长度变化时重新计算\n\n const getSelectedIndex = (scrollTop: number) => {\n return Math.round(scrollTop / itemHeightRef.current)\n }\n\n // 当selectedIndex变化时,调整滚动位置\n React.useEffect(() => {\n if (scrollViewRef.current && range.length > 0 && !isTouching) {\n const baseValue = selectedIndex * itemHeightRef.current\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue)\n setCurrentIndex(selectedIndex)\n }\n }, [selectedIndex, range])\n\n // 是否处于归中状态\n const isCenterTimerId = React.useRef<NodeJS.Timeout | null>(null)\n\n // 简化为直接在滚动结束时通知父组件\n const handleScrollEnd = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n\n // 做一个0.1s延时 0.1s之内没有新的滑动 则把选项归到中间 然后更新选中项\n isCenterTimerId.current = setTimeout(() => {\n if (!scrollViewRef.current) return\n\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop)\n\n setIsTouching(false)\n const baseValue = newIndex * itemHeightRef.current\n const randomOffset = Math.random() * 0.001 // 随机数为了在一个项内滚动时强制刷新\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, randomOffset)\n\n // 更新日期值\n if (updateDay) {\n // 解析文本中的数字(移除年、月、日等后缀)\n const valueText = range[newIndex] || ''\n const numericValue = parseInt(valueText.replace(/[^0-9]/g, ''))\n updateDay(isNaN(numericValue) ? 0 : numericValue, parseInt(columnId))\n }\n isCenterTimerId.current = null\n }, 100)\n }\n\n // 滚动处理\n const handleScroll = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop)\n if (newIndex !== currentIndex) {\n setCurrentIndex(newIndex)\n }\n }\n\n // 渲染选项\n const pickerItem = range.map((item, index) => {\n return (\n <View\n id={`picker-item-${columnId}-${index}`}\n key={index}\n className={`taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`}\n style={{\n height: PICKER_LINE_HEIGHT,\n color: index === currentIndex\n ? (colors.itemSelectedColor || undefined)\n : (colors.itemDefaultColor || undefined)\n }}\n >\n {item}\n </View>\n )\n })\n\n const realPickerItems = [\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-top-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ...pickerItem,\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-bottom-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ]\n\n return (\n <View className=\"taro-picker__group\">\n <View className=\"taro-picker__mask\" />\n <View\n className=\"taro-picker__indicator\"\n {...(indicatorStyle ? { style: indicatorStyle } : {})}\n />\n <ScrollView\n ref={scrollViewRef}\n scrollY\n showScrollbar={false}\n className=\"taro-picker__content\"\n style={{ height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS }}\n scrollTop={targetScrollTop}\n onScroll={handleScroll}\n onTouchStart={() => setIsTouching(true)}\n onScrollEnd={handleScrollEnd}\n scrollWithAnimation\n >\n {realPickerItems}\n </ScrollView>\n </View>\n )\n}\n\n// 地区选择器实现\nexport function PickerGroupRegion(props: PickerGroupProps) {\n const {\n range = [],\n rangeKey,\n columnId,\n updateIndex,\n selectedIndex = 0, // 使用selectedIndex参数,默认为0\n colors = {},\n } = props\n\n const indicatorStyle = colors.lineColor ? getIndicatorStyle(colors.lineColor) : null\n const scrollViewRef = React.useRef<any>(null)\n const [targetScrollTop, setTargetScrollTop] = React.useState(0)\n const [currentIndex, setCurrentIndex] = React.useState(selectedIndex)\n const [isTouching, setIsTouching] = React.useState(false)\n\n const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT)\n const isUserBeginScrollRef = React.useRef(false)\n React.useEffect(() => {\n if (process.env.TARO_PLATFORM !== 'harmony') {\n if (scrollViewRef.current && scrollViewRef.current?.scrollHeight) {\n itemHeightRef.current = scrollViewRef.current.scrollHeight / scrollViewRef.current.childNodes.length\n } else {\n console.warn('Height measurement anomaly')\n }\n }\n }, [range.length]) // 只在range长度变化时重新计算\n\n const getSelectedIndex = (scrollTop: number) => {\n return Math.round(scrollTop / itemHeightRef.current)\n }\n\n // 当selectedIndex变化时,调整滚动位置\n React.useEffect(() => {\n if (scrollViewRef.current && range.length > 0 && !isTouching) {\n const baseValue = selectedIndex * itemHeightRef.current\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue)\n setCurrentIndex(selectedIndex)\n }\n }, [selectedIndex, range])\n\n // 滚动结束处理\n const isCenterTimerId = React.useRef<NodeJS.Timeout | null>(null)\n const handleScrollEnd = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n // 做一个0.1s延时 0.1s之内没有新的滑动 则把选项归到中间 然后更新选中项\n isCenterTimerId.current = setTimeout(() => {\n if (!scrollViewRef.current) return\n\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop)\n\n setIsTouching(false)\n const baseValue = newIndex * itemHeightRef.current\n const randomOffset = Math.random() * 0.001 // 随机数为了在一个项内滚动时强制刷新\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, randomOffset)\n updateIndex(newIndex, columnId, false, isUserBeginScrollRef.current)\n }, 100)\n }\n\n // 滚动处理 - 在滚动时计算索引\n const handleScroll = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop)\n if (newIndex !== currentIndex) {\n setCurrentIndex(newIndex)\n }\n }\n\n // 渲染选项\n const pickerItem = range.map((item, index) => {\n const content = rangeKey && item && typeof item === 'object' ? item[rangeKey] : item\n\n return (\n <View\n id={`picker-item-${columnId}-${index}`}\n key={index}\n className={`taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`}\n style={{\n height: PICKER_LINE_HEIGHT,\n color: index === currentIndex\n ? (colors.itemSelectedColor || undefined)\n : (colors.itemDefaultColor || undefined)\n }}\n >\n {content}\n </View>\n )\n })\n\n const realPickerItems = [\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-top-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ...pickerItem,\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-bottom-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ]\n return (\n <View className=\"taro-picker__group\">\n <View className=\"taro-picker__mask\" />\n <View\n className=\"taro-picker__indicator\"\n {...(indicatorStyle ? { style: indicatorStyle } : {})}\n />\n <ScrollView\n ref={scrollViewRef}\n scrollY\n showScrollbar={false}\n className=\"taro-picker__content\"\n style={{ height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS }}\n scrollTop={targetScrollTop}\n onScroll={handleScroll}\n onTouchStart={() => {\n setIsTouching(true)\n isUserBeginScrollRef.current = true\n }}\n onScrollEnd={handleScrollEnd}\n scrollWithAnimation\n >\n {realPickerItems}\n </ScrollView>\n </View>\n )\n}\n\n// 默认导出,根据 mode 自动分发\nexport function PickerGroup(props: PickerGroupProps) {\n switch (props.mode) {\n case 'time':\n return <PickerGroupTime {...props} />\n case 'date':\n return <PickerGroupDate {...props} />\n case 'region':\n return <PickerGroupRegion {...props} />\n default:\n return <PickerGroupBasic {...props} />\n }\n}\n"],"names":["PICKER_LINE_HEIGHT","PICKER_VISIBLE_ITEMS","PICKER_BLANK_ITEMS","getIndicatorStyle","lineColor","borderTopColor","borderBottomColor","setTargetScrollTopWithScale","setTargetScrollTop","baseValue","randomOffset","process","env","TARO_ENV","finalValue","undefined","Taro","getSystemInfo","success","res","lengthScaleRatio","console","warn","windowWidth","shortSide","windowHeight","isBigScreen","scaledValue","fail","err","error","PickerGroupBasic","props","range","rangeKey","columnId","updateIndex","onColumnChange","selectedIndex","colors","indicatorStyle","targetScrollTop","React","useState","scrollViewRef","useRef","itemRefs","currentIndex","setCurrentIndex","isTouching","setIsTouching","itemHeightRef","useEffect","TARO_PLATFORM","current","_a","scrollHeight","childNodes","length","getSelectedIndex","scrollTop","Math","round","isCenterTimerId","handleScrollEnd","clearTimeout","setTimeout","newIndex","random","index","handleScroll","pickerItem","map","item","content","_jsx","View","id","ref","el","className","style","height","color","itemSelectedColor","itemDefaultColor","children","realPickerItems","Array","fill","_","idx","_jsxs","ScrollView","scrollY","showScrollbar","onScroll","onTouchStart","onScrollEnd","scrollWithAnimation","PickerGroupTime","isLimited","Boolean","PickerGroupDate","updateDay","valueText","numericValue","parseInt","replace","isNaN","PickerGroupRegion","isUserBeginScrollRef","PickerGroup","mode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"picker-group.js","sources":["../../../src/components/picker/picker-group.tsx"],"sourcesContent":["import { ScrollView, View } from '@tarojs/components'\nimport Taro from '@tarojs/taro'\nimport * as React from 'react'\n\n// 添加类型定义\ntype TaroScrollView = React.ElementRef<typeof ScrollView>\ntype TaroView = React.ElementRef<typeof View>\n\nfunction requestAccessibilityFocusOnView(node: TaroView | null | undefined): void {\n if (node == null) return\n const fn = (Taro as any).setAccessibilityFocus\n if (typeof fn !== 'function') return\n fn({ viewRef: { current: node } as React.RefObject<any> })\n}\n\n/** 部分端同 id 连续 scrollIntoView 不生效:先清空再在下一宏任务设回目标 id */\nfunction usePickerItemScrollIntoView(): [string, (itemId: string) => void] {\n const [scrollIntoView, setScrollIntoView] = React.useState('')\n const pulseRef = React.useRef(0)\n\n const scrollToItemId = React.useCallback((itemId: string) => {\n pulseRef.current += 1\n const token = pulseRef.current\n setScrollIntoView('')\n setTimeout(() => {\n if (pulseRef.current !== token) return\n setScrollIntoView(itemId)\n }, 0)\n }, [])\n\n return [scrollIntoView, scrollToItemId]\n}\n\nexport interface PickerGroupProps {\n mode?: 'basic' | 'time' | 'date' | 'region'\n range: any[]\n rangeKey?: string\n columnId: string\n updateIndex: (index: number, columnId: string, needRevise?: boolean, isUserBeginScroll?: boolean) => void // 替换updateHeight\n onColumnChange?: (e: { columnId: string, index: number }) => void // 修改回调参数名称\n updateDay?: (value: number, fields: number) => void\n selectedIndex?: number // 添加selectedIndex参数\n _updateTrigger?: any // 仅用于强制触发更新\n colors?: {\n itemDefaultColor?: string // 选项字体默认颜色\n itemSelectedColor?: string // 选项字体选中颜色\n lineColor?: string // 选中指示线颜色\n }\n /** time 限位后由父级下发,命中 columnId 的列在稳定后对该项 setAccessibilityFocus */\n timeA11yLimitFocus?: { nonce: number, columnId: string } | null\n onTimeA11yLimitFocusConsumed?: () => void\n /** time 限位单调计数:抑制非触发列在停滚时误抢无障碍焦点 */\n timeA11yLimitEventNonce?: number\n /** 点击选项是否滚至选中区,默认 true */\n enableClickItemScroll?: boolean\n}\n\n// 定义常量\nconst PICKER_LINE_HEIGHT = 34 // px\nconst PICKER_VISIBLE_ITEMS = 7 // 可见行数\nconst PICKER_BLANK_ITEMS = 3 // 空白行数\n\nconst getIndicatorStyle = (lineColor: string): React.CSSProperties => {\n return {\n borderTopColor: lineColor,\n borderBottomColor: lineColor\n }\n}\n\n// 大屏方案版本要求\nconst MIN_DESIGN_APP_VERSION = 16\n\n// 判断是否启用测量值缩放适配(true=启用, false=使用系统侧缩放)\nconst resolveUseMeasuredScale = (res: Taro.getSystemInfo.Result): boolean => {\n // H5/weapp 不参与大屏系数\n if (process.env.TARO_ENV === 'h5' || process.env.TARO_ENV === 'weapp') {\n return false\n }\n\n const designAppVersionRaw = (res as any).designAppVersion\n const designAppVersionMajor = designAppVersionRaw != null ? parseInt(String(designAppVersionRaw).trim(), 10) : Number.NaN\n if (!Number.isFinite(designAppVersionMajor) || designAppVersionMajor < MIN_DESIGN_APP_VERSION) {\n return false\n }\n\n const platform = String((res as any).platform || '').toLowerCase()\n if (platform === 'harmony' || platform === 'android' || platform === 'ios') {\n return true\n }\n\n return false\n}\n\n// 辅助函数:计算 lengthScaleRatio\nconst calculateLengthScaleRatio = (res: Taro.getSystemInfo.Result): number => {\n let lengthScaleRatio = (res as any)?.lengthScaleRatio\n if (lengthScaleRatio == null || lengthScaleRatio === 0) {\n console.warn('Taro.getSystemInfo: lengthScaleRatio 不存在,使用计算值')\n lengthScaleRatio = 1\n if (res.windowWidth < 320) {\n lengthScaleRatio = res.windowWidth / 320\n } else if (res.windowWidth >= 400 && res.windowWidth < 600) {\n lengthScaleRatio = res.windowWidth / 400\n }\n const shortSide = res.windowWidth < res.windowHeight ? res.windowWidth : res.windowHeight\n const isBigScreen = shortSide >= 600\n if (isBigScreen) {\n lengthScaleRatio = shortSide / 720\n }\n }\n return lengthScaleRatio\n}\n\n// 辅助函数:获取系统信息的 lengthScaleRatio 并设置 targetScrollTop\nconst setTargetScrollTopWithScale = (\n setTargetScrollTop: (value: number) => void,\n baseValue: number,\n randomOffset?: number,\n lengthScaleRatio: number = 1,\n) => {\n // H5 和 weapp 不参与放大计算,直接使用 baseValue\n if (process.env.TARO_ENV === 'h5' || process.env.TARO_ENV === 'weapp') {\n const finalValue = randomOffset !== undefined ? baseValue + randomOffset : baseValue\n setTargetScrollTop(finalValue)\n return\n }\n\n if (process.env.TARO_PLATFORM === 'harmony') {\n const scaledValue = baseValue\n const finalValue = randomOffset !== undefined ? scaledValue + randomOffset : scaledValue\n setTargetScrollTop(finalValue)\n } else {\n const scaledValue = baseValue * lengthScaleRatio\n const finalValue = randomOffset !== undefined ? scaledValue + randomOffset : scaledValue\n setTargetScrollTop(finalValue)\n }\n}\n\n// 根据 scrollTop 计算选中索引\n// 系统侧缩放模式:scrollHeight 已被系统缩放,直接相除即可\n// 自行缩放模式:需要除以 ratio 换算(harmony 特殊处理,ratio 已内嵌在 itemHeight 中)\nconst getSelectedIndex = (scrollTop: number, itemHeight: number, lengthScaleRatio: number = 1, useMeasuredScale: boolean = false): number => {\n if (!useMeasuredScale || process.env.TARO_PLATFORM === 'harmony') {\n return Math.round(scrollTop / itemHeight)\n }\n return Math.round(scrollTop / lengthScaleRatio / itemHeight)\n}\n\n// 计算单项高度(返回设计稿值)\nconst calculateItemHeight = (\n scrollView: TaroScrollView | null,\n lengthScaleRatio: number,\n useMeasuredScale: boolean = false,\n): number => {\n if (process.env.TARO_PLATFORM === 'harmony') {\n return useMeasuredScale ? PICKER_LINE_HEIGHT * lengthScaleRatio : PICKER_LINE_HEIGHT\n }\n if (scrollView && scrollView?.scrollHeight) {\n return useMeasuredScale\n ? scrollView.scrollHeight / lengthScaleRatio / scrollView.childNodes.length\n : scrollView.scrollHeight / scrollView.childNodes.length\n }\n console.warn('Height measurement anomaly')\n return PICKER_LINE_HEIGHT\n}\n\nexport function PickerGroupBasic(props: PickerGroupProps) {\n const {\n range = [],\n rangeKey,\n columnId,\n updateIndex,\n onColumnChange,\n selectedIndex = 0, // 使用selectedIndex参数,默认为0\n colors = {},\n enableClickItemScroll = true,\n } = props\n const indicatorStyle = colors.lineColor ? getIndicatorStyle(colors.lineColor) : null\n const [targetScrollTop, setTargetScrollTop] = React.useState(0)\n const [scrollIntoView, scrollToItemId] = usePickerItemScrollIntoView()\n const scrollViewRef = React.useRef<TaroScrollView>(null)\n const itemRefs = React.useRef<Array<TaroView | null>>([])\n const selectedIndexPropRef = React.useRef(selectedIndex)\n selectedIndexPropRef.current = selectedIndex\n const syncScrollFromPropsRef = React.useRef(false)\n const pendingScrollSettleFocusRef = React.useRef(false)\n // 使用selectedIndex初始化当前索引\n const [currentIndex, setCurrentIndex] = React.useState(selectedIndex)\n // 触摸状态用于优化用户体验\n const isTouchingRef = React.useRef(false)\n\n const lengthScaleRatioRef = React.useRef(1)\n const useMeasuredScaleRef = React.useRef(false)\n const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT)\n\n // 初始化时计算 lengthScaleRatio 并判定缩放模式\n React.useEffect(() => {\n Taro.getSystemInfo({\n success: (res) => {\n lengthScaleRatioRef.current = calculateLengthScaleRatio(res)\n useMeasuredScaleRef.current = resolveUseMeasuredScale(res)\n itemHeightRef.current = calculateItemHeight(scrollViewRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n },\n fail: () => {\n lengthScaleRatioRef.current = 1\n useMeasuredScaleRef.current = false\n }\n })\n }, [])\n\n React.useEffect(() => {\n itemHeightRef.current = calculateItemHeight(scrollViewRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n }, [range.length]) // 只在range长度变化时重新计算\n\n // props 的 selectedIndex 变化:滚至对应项并短时标记程序化滚动(syncScrollFromPropsRef)\n React.useEffect(() => {\n if (scrollViewRef.current && range.length > 0 && !isTouchingRef.current) {\n syncScrollFromPropsRef.current = true\n const baseValue = selectedIndex * itemHeightRef.current\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, undefined, lengthScaleRatioRef.current)\n setCurrentIndex(selectedIndex)\n const tid = setTimeout(() => {\n syncScrollFromPropsRef.current = false\n }, 400)\n return () => clearTimeout(tid)\n }\n }, [selectedIndex, range])\n\n // 是否处于归中状态\n const isCenterTimerId = React.useRef<NodeJS.Timeout | null>(null)\n // 滚动静止后归中并同步选中\n const handleScrollEnd = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n // 100ms 内无新滚动则归中并提交索引\n isCenterTimerId.current = setTimeout(() => {\n if (!scrollViewRef.current) return\n\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop, itemHeightRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n\n const allowA11yFocus = !syncScrollFromPropsRef.current\n const shouldFocusOnScrollSettle = pendingScrollSettleFocusRef.current\n\n isTouchingRef.current = false\n const baseValue = newIndex * itemHeightRef.current\n const randomOffset = Math.random() * 0.001 // 随机数为了在一个项内滚动时强制刷新\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, randomOffset, lengthScaleRatioRef.current)\n updateIndex(newIndex, columnId)\n onColumnChange?.({ columnId, index: newIndex })\n pendingScrollSettleFocusRef.current = false\n if (allowA11yFocus && shouldFocusOnScrollSettle) {\n requestAccessibilityFocusOnView(itemRefs.current[newIndex])\n }\n syncScrollFromPropsRef.current = false\n isCenterTimerId.current = null\n }, 100)\n }\n // 滚动中:按 scrollTop 更新高亮索引\n const handleScroll = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n const scrollTop = scrollViewRef.current.scrollTop\n const ih = itemHeightRef.current\n const newIndex = getSelectedIndex(scrollTop, ih, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n const spi = selectedIndexPropRef.current\n if (newIndex !== spi) {\n if (!syncScrollFromPropsRef.current || isTouchingRef.current) {\n pendingScrollSettleFocusRef.current = true\n }\n if (isTouchingRef.current) {\n syncScrollFromPropsRef.current = false\n }\n }\n if (newIndex !== currentIndex) {\n setCurrentIndex(newIndex)\n }\n }\n\n // 渲染选项\n const pickerItem = range.map((item, index) => {\n const content = rangeKey && item && typeof item === 'object' ? item[rangeKey] : item\n\n return (\n <View\n id={`picker-item-${columnId}-${index}`}\n key={index}\n ref={(el) => (itemRefs.current[index] = el)}\n className={`taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`}\n {...(enableClickItemScroll\n ? { onClick: () => scrollToItemId(`picker-item-${columnId}-${index}`) }\n : {})}\n style={{\n height: PICKER_LINE_HEIGHT,\n color: index === currentIndex\n ? (colors.itemSelectedColor || undefined)\n : (colors.itemDefaultColor || undefined)\n }}\n >\n {content}\n </View>\n )\n })\n\n const realPickerItems = [\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-top-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ...pickerItem,\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-bottom-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ]\n\n const clickScrollViewProps = enableClickItemScroll\n ? { scrollIntoView, scrollIntoViewAlignment: 'center' as const }\n : {}\n\n return (\n <View className=\"taro-picker__group\">\n <View className=\"taro-picker__mask\" />\n <View\n className=\"taro-picker__indicator\"\n {...(indicatorStyle ? { style: indicatorStyle } : {})}\n />\n <ScrollView\n ref={scrollViewRef}\n scrollY\n showScrollbar={false}\n className=\"taro-picker__content\"\n style={{\n height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS,\n }}\n scrollTop={targetScrollTop}\n {...clickScrollViewProps}\n onScroll={handleScroll}\n onTouchStart={() => { isTouchingRef.current = true }}\n onScrollEnd={handleScrollEnd}\n scrollWithAnimation\n >\n {realPickerItems}\n </ScrollView>\n </View>\n )\n}\n\n// 时间选择器实现\nexport function PickerGroupTime(props: PickerGroupProps) {\n const {\n range = [],\n rangeKey,\n columnId,\n updateIndex,\n selectedIndex = 0,\n colors = {},\n timeA11yLimitFocus,\n onTimeA11yLimitFocusConsumed,\n timeA11yLimitEventNonce,\n enableClickItemScroll = true,\n } = props\n\n const indicatorStyle = colors.lineColor ? getIndicatorStyle(colors.lineColor) : null\n const [targetScrollTop, setTargetScrollTop] = React.useState(0)\n const [scrollIntoView, scrollToItemId] = usePickerItemScrollIntoView()\n const scrollViewRef = React.useRef<TaroScrollView>(null)\n const itemRefs = React.useRef<Array<TaroView | null>>([])\n const selectedIndexPropRef = React.useRef(selectedIndex)\n selectedIndexPropRef.current = selectedIndex\n const syncScrollFromPropsRef = React.useRef(false)\n const prevLimitEventNonceRef = React.useRef<number | undefined>(undefined)\n const suppressScrollSettleFocusNonceRef = React.useRef<number | null>(null)\n const pendingScrollSettleFocusRef = React.useRef(false)\n const pendingLimitFocusRef = React.useRef<{ index: number, nonce: number, attempts: number } | null>(null)\n const limitFocusTimerRef = React.useRef<NodeJS.Timeout | null>(null)\n const [currentIndex, setCurrentIndex] = React.useState(selectedIndex)\n const isTouchingRef = React.useRef(false)\n\n const lengthScaleRatioRef = React.useRef(1)\n const useMeasuredScaleRef = React.useRef(false)\n const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT)\n\n const clearLimitFocusTimer = React.useCallback(() => {\n if (limitFocusTimerRef.current) {\n clearTimeout(limitFocusTimerRef.current)\n limitFocusTimerRef.current = null\n }\n }, [])\n\n const tryFocusPendingLimit = React.useCallback(() => {\n const pending = pendingLimitFocusRef.current\n const scrollView = scrollViewRef.current\n if (!pending || !scrollView) return\n\n const visualIndex = getSelectedIndex(\n scrollView.scrollTop,\n itemHeightRef.current,\n lengthScaleRatioRef.current,\n useMeasuredScaleRef.current,\n )\n const isStable = visualIndex === pending.index\n\n if (!isStable) {\n if (pending.attempts >= 20) {\n pendingLimitFocusRef.current = null\n if (suppressScrollSettleFocusNonceRef.current === pending.nonce) {\n suppressScrollSettleFocusNonceRef.current = null\n }\n onTimeA11yLimitFocusConsumed?.()\n return\n }\n pending.attempts += 1\n clearLimitFocusTimer()\n limitFocusTimerRef.current = setTimeout(() => {\n tryFocusPendingLimit()\n }, 50)\n return\n }\n\n const node = itemRefs.current[pending.index]\n pendingLimitFocusRef.current = null\n if (suppressScrollSettleFocusNonceRef.current === pending.nonce) {\n suppressScrollSettleFocusNonceRef.current = null\n }\n clearLimitFocusTimer()\n requestAccessibilityFocusOnView(node)\n onTimeA11yLimitFocusConsumed?.()\n }, [clearLimitFocusTimer, onTimeA11yLimitFocusConsumed])\n\n const schedulePendingLimitFocus = React.useCallback(() => {\n if (!pendingLimitFocusRef.current) return\n clearLimitFocusTimer()\n limitFocusTimerRef.current = setTimeout(() => {\n tryFocusPendingLimit()\n }, 100)\n }, [clearLimitFocusTimer, tryFocusPendingLimit])\n\n React.useEffect(() => clearLimitFocusTimer, [clearLimitFocusTimer])\n\n // 初始化时计算 lengthScaleRatio 并判定缩放模式\n React.useEffect(() => {\n Taro.getSystemInfo({\n success: (res) => {\n lengthScaleRatioRef.current = calculateLengthScaleRatio(res)\n useMeasuredScaleRef.current = resolveUseMeasuredScale(res)\n itemHeightRef.current = calculateItemHeight(scrollViewRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n },\n fail: () => {\n lengthScaleRatioRef.current = 1\n useMeasuredScaleRef.current = false\n }\n })\n }, [])\n\n React.useEffect(() => {\n itemHeightRef.current = calculateItemHeight(scrollViewRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n }, [range.length]) // 只在range长度变化时重新计算\n\n // props 的 selectedIndex 变化:滚至对应项并短时标记程序化滚动(syncScrollFromPropsRef)\n React.useEffect(() => {\n if (scrollViewRef.current && range.length > 0 && !isTouchingRef.current) {\n syncScrollFromPropsRef.current = true\n const baseValue = selectedIndex * itemHeightRef.current\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, undefined, lengthScaleRatioRef.current)\n setCurrentIndex(selectedIndex)\n const tid = setTimeout(() => {\n syncScrollFromPropsRef.current = false\n }, 400)\n return () => clearTimeout(tid)\n }\n }, [selectedIndex, range])\n\n // time 限位 nonce 变更:强制对齐 scrollTop(避免 remount 打断读屏焦点)\n React.useEffect(() => {\n if (!timeA11yLimitEventNonce) return\n if (!scrollViewRef.current || range.length === 0 || isTouchingRef.current) return\n syncScrollFromPropsRef.current = true\n const baseValue = selectedIndex * itemHeightRef.current\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, Math.random() * 0.001, lengthScaleRatioRef.current)\n setCurrentIndex(selectedIndex)\n const tid = setTimeout(() => {\n syncScrollFromPropsRef.current = false\n }, 400)\n return () => clearTimeout(tid)\n }, [timeA11yLimitEventNonce]) // 仅依赖 nonce,其余用 ref\n\n React.useLayoutEffect(() => {\n if (timeA11yLimitEventNonce === undefined) return\n const prev = prevLimitEventNonceRef.current\n prevLimitEventNonceRef.current = timeA11yLimitEventNonce\n if (timeA11yLimitEventNonce > 0 && (prev === undefined || timeA11yLimitEventNonce > prev)) {\n suppressScrollSettleFocusNonceRef.current = timeA11yLimitEventNonce\n }\n }, [timeA11yLimitEventNonce])\n\n // 限位后登记本列待聚焦项,稳定后再 requestAccessibilityFocus\n React.useEffect(() => {\n const req = timeA11yLimitFocus\n if (!req || req.columnId !== columnId) return\n const idx = selectedIndex\n const nonce = req.nonce\n pendingScrollSettleFocusRef.current = false\n pendingLimitFocusRef.current = { index: idx, nonce, attempts: 0 }\n schedulePendingLimitFocus()\n }, [timeA11yLimitFocus, columnId, selectedIndex, schedulePendingLimitFocus])\n\n // 是否处于归中状态\n const isCenterTimerId = React.useRef<NodeJS.Timeout | null>(null)\n\n // 滚动静止后归中并同步选中\n const handleScrollEnd = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n // 100ms 内无新滚动则归中并提交索引\n isCenterTimerId.current = setTimeout(() => {\n if (!scrollViewRef.current) return\n\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop, itemHeightRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n const allowA11yFocus = !syncScrollFromPropsRef.current\n const shouldFocusOnScrollSettle = pendingScrollSettleFocusRef.current\n isTouchingRef.current = false\n const isLimited = Boolean(updateIndex(newIndex, columnId, true))\n const hasPendingLimitFocus = pendingLimitFocusRef.current != null\n if (isLimited) {\n pendingScrollSettleFocusRef.current = false\n }\n if (!isLimited) {\n const baseValue = newIndex * itemHeightRef.current\n const randomOffset = Math.random() * 0.001\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, randomOffset, lengthScaleRatioRef.current)\n }\n if (!isLimited && hasPendingLimitFocus) {\n pendingScrollSettleFocusRef.current = false\n schedulePendingLimitFocus()\n syncScrollFromPropsRef.current = false\n isCenterTimerId.current = null\n return\n }\n if (!isLimited && pendingLimitFocusRef.current == null && suppressScrollSettleFocusNonceRef.current != null) {\n suppressScrollSettleFocusNonceRef.current = null\n }\n const suppressByLimitNonce = suppressScrollSettleFocusNonceRef.current != null\n if (!isLimited && allowA11yFocus && shouldFocusOnScrollSettle) {\n pendingScrollSettleFocusRef.current = false\n if (!suppressByLimitNonce) {\n requestAccessibilityFocusOnView(itemRefs.current[newIndex])\n }\n }\n syncScrollFromPropsRef.current = false\n isCenterTimerId.current = null\n }, 100)\n }\n\n // 滚动中:按 scrollTop 更新高亮索引\n const handleScroll = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n const scrollTop = scrollViewRef.current.scrollTop\n const ih = itemHeightRef.current\n const newIndex = getSelectedIndex(scrollTop, ih, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n const spi = selectedIndexPropRef.current\n if (newIndex !== spi) {\n if (!syncScrollFromPropsRef.current || isTouchingRef.current) {\n pendingScrollSettleFocusRef.current = true\n }\n if (isTouchingRef.current) {\n syncScrollFromPropsRef.current = false\n }\n }\n if (newIndex !== currentIndex) {\n setCurrentIndex(newIndex)\n }\n if (pendingLimitFocusRef.current) {\n schedulePendingLimitFocus()\n }\n }\n\n // 渲染选项\n const pickerItem = range.map((item, index) => {\n const content = rangeKey && item && typeof item === 'object' ? item[rangeKey] : item\n\n return (\n <View\n id={`picker-item-${columnId}-${index}`}\n key={index}\n ref={(el) => (itemRefs.current[index] = el)}\n className={`taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`}\n {...(enableClickItemScroll\n ? { onClick: () => scrollToItemId(`picker-item-${columnId}-${index}`) }\n : {})}\n style={{\n height: PICKER_LINE_HEIGHT,\n color: index === currentIndex\n ? (colors.itemSelectedColor || undefined)\n : (colors.itemDefaultColor || undefined)\n }}\n >\n {content}\n </View>\n )\n })\n\n const realPickerItems = [\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-top-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ...pickerItem,\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-bottom-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ]\n\n const clickScrollViewProps = enableClickItemScroll\n ? { scrollIntoView, scrollIntoViewAlignment: 'center' as const }\n : {}\n\n return (\n <View className=\"taro-picker__group\">\n <View className=\"taro-picker__mask\" />\n <View\n className=\"taro-picker__indicator\"\n {...(indicatorStyle ? { style: indicatorStyle } : {})}\n />\n <ScrollView\n ref={scrollViewRef}\n scrollY\n showScrollbar={false}\n className=\"taro-picker__content\"\n style={{\n height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS,\n }}\n scrollTop={targetScrollTop}\n {...clickScrollViewProps}\n onScroll={handleScroll}\n onTouchStart={() => { isTouchingRef.current = true }}\n onScrollEnd={handleScrollEnd}\n scrollWithAnimation\n >\n {realPickerItems}\n </ScrollView>\n </View>\n )\n}\n\n// 日期选择器实现\nexport function PickerGroupDate(props: PickerGroupProps) {\n const {\n range = [],\n columnId,\n updateDay,\n selectedIndex = 0,\n colors = {},\n enableClickItemScroll = true,\n } = props\n\n const indicatorStyle = colors.lineColor ? getIndicatorStyle(colors.lineColor) : null\n const [targetScrollTop, setTargetScrollTop] = React.useState(0)\n const [scrollIntoView, scrollToItemId] = usePickerItemScrollIntoView()\n const scrollViewRef = React.useRef<TaroScrollView>(null)\n const itemRefs = React.useRef<Array<TaroView | null>>([])\n const selectedIndexPropRef = React.useRef(selectedIndex)\n selectedIndexPropRef.current = selectedIndex\n const syncScrollFromPropsRef = React.useRef(false)\n const pendingScrollSettleFocusRef = React.useRef(false)\n const [currentIndex, setCurrentIndex] = React.useState(selectedIndex)\n const isTouchingRef = React.useRef(false)\n\n const lengthScaleRatioRef = React.useRef(1)\n const useMeasuredScaleRef = React.useRef(false)\n const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT)\n\n // 初始化时计算 lengthScaleRatio 并判定缩放模式\n React.useEffect(() => {\n Taro.getSystemInfo({\n success: (res) => {\n lengthScaleRatioRef.current = calculateLengthScaleRatio(res)\n useMeasuredScaleRef.current = resolveUseMeasuredScale(res)\n itemHeightRef.current = calculateItemHeight(scrollViewRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n },\n fail: () => {\n lengthScaleRatioRef.current = 1\n useMeasuredScaleRef.current = false\n }\n })\n }, [])\n\n React.useEffect(() => {\n itemHeightRef.current = calculateItemHeight(scrollViewRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n }, [range.length]) // 只在range长度变化时重新计算\n\n // props 的 selectedIndex 变化:滚至对应项并短时标记程序化滚动(syncScrollFromPropsRef)\n React.useEffect(() => {\n if (scrollViewRef.current && range.length > 0 && !isTouchingRef.current) {\n syncScrollFromPropsRef.current = true\n const baseValue = selectedIndex * itemHeightRef.current\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, undefined, lengthScaleRatioRef.current)\n setCurrentIndex(selectedIndex)\n const tid = setTimeout(() => {\n syncScrollFromPropsRef.current = false\n }, 400)\n return () => clearTimeout(tid)\n }\n }, [selectedIndex, range])\n\n // 是否处于归中状态\n const isCenterTimerId = React.useRef<NodeJS.Timeout | null>(null)\n\n // 滚动静止后归中并同步选中\n const handleScrollEnd = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n\n // 100ms 内无新滚动则归中并提交索引\n isCenterTimerId.current = setTimeout(() => {\n if (!scrollViewRef.current) return\n\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop, itemHeightRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n\n const allowA11yFocus = !syncScrollFromPropsRef.current\n const shouldFocusOnScrollSettle = pendingScrollSettleFocusRef.current\n\n isTouchingRef.current = false\n const baseValue = newIndex * itemHeightRef.current\n const randomOffset = Math.random() * 0.001 // 随机数为了在一个项内滚动时强制刷新\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, randomOffset, lengthScaleRatioRef.current)\n\n // 更新日期值\n if (updateDay) {\n // 解析文本中的数字(移除年、月、日等后缀)\n const valueText = range[newIndex] || ''\n const numericValue = parseInt(valueText.replace(/[^0-9]/g, ''))\n updateDay(isNaN(numericValue) ? 0 : numericValue, parseInt(columnId))\n }\n pendingScrollSettleFocusRef.current = false\n if (allowA11yFocus && shouldFocusOnScrollSettle) {\n requestAccessibilityFocusOnView(itemRefs.current[newIndex])\n }\n syncScrollFromPropsRef.current = false\n isCenterTimerId.current = null\n }, 100)\n }\n\n // 滚动中:按 scrollTop 更新高亮索引\n const handleScroll = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n const scrollTop = scrollViewRef.current.scrollTop\n const ih = itemHeightRef.current\n const newIndex = getSelectedIndex(scrollTop, ih, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n const spi = selectedIndexPropRef.current\n if (newIndex !== spi) {\n if (!syncScrollFromPropsRef.current || isTouchingRef.current) {\n pendingScrollSettleFocusRef.current = true\n }\n if (isTouchingRef.current) {\n syncScrollFromPropsRef.current = false\n }\n }\n if (newIndex !== currentIndex) {\n setCurrentIndex(newIndex)\n }\n }\n\n // 渲染选项\n const pickerItem = range.map((item, index) => {\n return (\n <View\n id={`picker-item-${columnId}-${index}`}\n key={index}\n ref={(el) => (itemRefs.current[index] = el)}\n className={`taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`}\n {...(enableClickItemScroll\n ? { onClick: () => scrollToItemId(`picker-item-${columnId}-${index}`) }\n : {})}\n style={{\n height: PICKER_LINE_HEIGHT,\n color: index === currentIndex\n ? (colors.itemSelectedColor || undefined)\n : (colors.itemDefaultColor || undefined)\n }}\n >\n {item}\n </View>\n )\n })\n\n const realPickerItems = [\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-top-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ...pickerItem,\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-bottom-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ]\n\n const clickScrollViewProps = enableClickItemScroll\n ? { scrollIntoView, scrollIntoViewAlignment: 'center' as const }\n : {}\n\n return (\n <View className=\"taro-picker__group\">\n <View className=\"taro-picker__mask\" />\n <View\n className=\"taro-picker__indicator\"\n {...(indicatorStyle ? { style: indicatorStyle } : {})}\n />\n <ScrollView\n ref={scrollViewRef}\n scrollY\n showScrollbar={false}\n className=\"taro-picker__content\"\n style={{ height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS }}\n scrollTop={targetScrollTop}\n {...clickScrollViewProps}\n onScroll={handleScroll}\n onTouchStart={() => { isTouchingRef.current = true }}\n onScrollEnd={handleScrollEnd}\n scrollWithAnimation\n >\n {realPickerItems}\n </ScrollView>\n </View>\n )\n}\n\n// 地区选择器实现\nexport function PickerGroupRegion(props: PickerGroupProps) {\n const {\n range = [],\n rangeKey,\n columnId,\n updateIndex,\n selectedIndex = 0, // 使用selectedIndex参数,默认为0\n colors = {},\n enableClickItemScroll = true,\n } = props\n\n const indicatorStyle = colors.lineColor ? getIndicatorStyle(colors.lineColor) : null\n const scrollViewRef = React.useRef<any>(null)\n const [targetScrollTop, setTargetScrollTop] = React.useState(0)\n const [scrollIntoView, scrollToItemId] = usePickerItemScrollIntoView()\n const [currentIndex, setCurrentIndex] = React.useState(selectedIndex)\n const isTouchingRef = React.useRef(false)\n\n const lengthScaleRatioRef = React.useRef(1)\n const useMeasuredScaleRef = React.useRef(false)\n const itemHeightRef = React.useRef(PICKER_LINE_HEIGHT)\n const itemRefs = React.useRef<Array<TaroView | null>>([])\n const selectedIndexPropRef = React.useRef(selectedIndex)\n selectedIndexPropRef.current = selectedIndex\n const syncScrollFromPropsRef = React.useRef(false)\n const pendingScrollSettleFocusRef = React.useRef(false)\n\n // 初始化时计算 lengthScaleRatio 并判定缩放模式\n React.useEffect(() => {\n Taro.getSystemInfo({\n success: (res) => {\n lengthScaleRatioRef.current = calculateLengthScaleRatio(res)\n useMeasuredScaleRef.current = resolveUseMeasuredScale(res)\n itemHeightRef.current = calculateItemHeight(scrollViewRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n },\n fail: () => {\n lengthScaleRatioRef.current = 1\n useMeasuredScaleRef.current = false\n }\n })\n }, [])\n\n React.useEffect(() => {\n itemHeightRef.current = calculateItemHeight(scrollViewRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n }, [range.length]) // 只在range长度变化时重新计算\n\n // props 的 selectedIndex 变化:滚至对应项并短时标记程序化滚动(syncScrollFromPropsRef)\n React.useEffect(() => {\n if (scrollViewRef.current && range.length > 0 && !isTouchingRef.current) {\n syncScrollFromPropsRef.current = true\n const baseValue = selectedIndex * itemHeightRef.current\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, undefined, lengthScaleRatioRef.current)\n setCurrentIndex(selectedIndex)\n const tid = setTimeout(() => {\n syncScrollFromPropsRef.current = false\n }, 400)\n return () => clearTimeout(tid)\n }\n }, [selectedIndex, range])\n\n // 滚动静止后归中(debounce)\n const isCenterTimerId = React.useRef<NodeJS.Timeout | null>(null)\n const handleScrollEnd = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n // 100ms 内无新滚动则归中并提交索引\n isCenterTimerId.current = setTimeout(() => {\n if (!scrollViewRef.current) return\n\n const scrollTop = scrollViewRef.current.scrollTop\n const newIndex = getSelectedIndex(scrollTop, itemHeightRef.current, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n\n const allowA11yFocus = !syncScrollFromPropsRef.current\n const shouldFocusOnScrollSettle = pendingScrollSettleFocusRef.current\n\n isTouchingRef.current = false\n const baseValue = newIndex * itemHeightRef.current\n const randomOffset = Math.random() * 0.001 // 随机数为了在一个项内滚动时强制刷新\n setTargetScrollTopWithScale(setTargetScrollTop, baseValue, randomOffset, lengthScaleRatioRef.current)\n updateIndex(newIndex, columnId, false, allowA11yFocus)\n pendingScrollSettleFocusRef.current = false\n if (allowA11yFocus && shouldFocusOnScrollSettle) {\n requestAccessibilityFocusOnView(itemRefs.current[newIndex])\n }\n syncScrollFromPropsRef.current = false\n isCenterTimerId.current = null\n }, 100)\n }\n\n // 滚动中:按 scrollTop 更新高亮索引\n const handleScroll = () => {\n if (!scrollViewRef.current) return\n if (isCenterTimerId.current) {\n clearTimeout(isCenterTimerId.current)\n isCenterTimerId.current = null\n }\n const scrollTop = scrollViewRef.current.scrollTop\n const ih = itemHeightRef.current\n const newIndex = getSelectedIndex(scrollTop, ih, lengthScaleRatioRef.current, useMeasuredScaleRef.current)\n const spi = selectedIndexPropRef.current\n if (newIndex !== spi) {\n if (!syncScrollFromPropsRef.current || isTouchingRef.current) {\n pendingScrollSettleFocusRef.current = true\n }\n if (isTouchingRef.current) {\n syncScrollFromPropsRef.current = false\n }\n }\n if (newIndex !== currentIndex) {\n setCurrentIndex(newIndex)\n }\n }\n\n // 渲染选项\n const pickerItem = range.map((item, index) => {\n const content = rangeKey && item && typeof item === 'object' ? item[rangeKey] : item\n\n return (\n <View\n id={`picker-item-${columnId}-${index}`}\n key={index}\n ref={(el) => (itemRefs.current[index] = el)}\n className={`taro-picker__item${index === currentIndex ? ' taro-picker__item--selected' : ''}`}\n {...(enableClickItemScroll\n ? { onClick: () => scrollToItemId(`picker-item-${columnId}-${index}`) }\n : {})}\n style={{\n height: PICKER_LINE_HEIGHT,\n color: index === currentIndex\n ? (colors.itemSelectedColor || undefined)\n : (colors.itemDefaultColor || undefined)\n }}\n >\n {content}\n </View>\n )\n })\n\n const realPickerItems = [\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-top-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ...pickerItem,\n ...new Array(PICKER_BLANK_ITEMS)\n .fill(null)\n .map((_, idx) => (\n <View\n key={`blank-bottom-${idx}`}\n className=\"taro-picker__item taro-picker__item--blank\"\n style={{ height: PICKER_LINE_HEIGHT }}\n />\n )),\n ]\n const clickScrollViewProps = enableClickItemScroll\n ? { scrollIntoView, scrollIntoViewAlignment: 'center' as const }\n : {}\n\n return (\n <View className=\"taro-picker__group\">\n <View className=\"taro-picker__mask\" />\n <View\n className=\"taro-picker__indicator\"\n {...(indicatorStyle ? { style: indicatorStyle } : {})}\n />\n <ScrollView\n ref={scrollViewRef}\n scrollY\n showScrollbar={false}\n className=\"taro-picker__content\"\n style={{ height: PICKER_LINE_HEIGHT * PICKER_VISIBLE_ITEMS }}\n scrollTop={targetScrollTop}\n {...clickScrollViewProps}\n onScroll={handleScroll}\n onTouchStart={() => { isTouchingRef.current = true }}\n onScrollEnd={handleScrollEnd}\n scrollWithAnimation\n >\n {realPickerItems}\n </ScrollView>\n </View>\n )\n}\n\n// 默认导出,根据 mode 自动分发\nexport function PickerGroup(props: PickerGroupProps) {\n switch (props.mode) {\n case 'time':\n return <PickerGroupTime {...props} />\n case 'date':\n return <PickerGroupDate {...props} />\n case 'region':\n return <PickerGroupRegion {...props} />\n default:\n return <PickerGroupBasic {...props} />\n }\n}\n"],"names":["requestAccessibilityFocusOnView","node","fn","Taro","setAccessibilityFocus","viewRef","current","usePickerItemScrollIntoView","scrollIntoView","setScrollIntoView","React","useState","pulseRef","useRef","scrollToItemId","useCallback","itemId","token","setTimeout","PICKER_LINE_HEIGHT","PICKER_VISIBLE_ITEMS","PICKER_BLANK_ITEMS","getIndicatorStyle","lineColor","borderTopColor","borderBottomColor","MIN_DESIGN_APP_VERSION","resolveUseMeasuredScale","res","process","env","TARO_ENV","designAppVersionRaw","designAppVersion","designAppVersionMajor","parseInt","String","trim","Number","NaN","isFinite","platform","toLowerCase","calculateLengthScaleRatio","lengthScaleRatio","console","warn","windowWidth","shortSide","windowHeight","isBigScreen","setTargetScrollTopWithScale","setTargetScrollTop","baseValue","randomOffset","arguments","length","undefined","finalValue","TARO_PLATFORM","scaledValue","getSelectedIndex","scrollTop","itemHeight","useMeasuredScale","Math","round","calculateItemHeight","scrollView","scrollHeight","childNodes","PickerGroupBasic","props","range","rangeKey","columnId","updateIndex","onColumnChange","selectedIndex","colors","enableClickItemScroll","indicatorStyle","targetScrollTop","scrollViewRef","itemRefs","selectedIndexPropRef","syncScrollFromPropsRef","pendingScrollSettleFocusRef","currentIndex","setCurrentIndex","isTouchingRef","lengthScaleRatioRef","useMeasuredScaleRef","itemHeightRef","useEffect","getSystemInfo","success","fail","tid","clearTimeout","isCenterTimerId","handleScrollEnd","newIndex","allowA11yFocus","shouldFocusOnScrollSettle","random","index","handleScroll","ih","spi","pickerItem","map","item","content","_jsx","View","id","ref","el","className","onClick","style","height","color","itemSelectedColor","itemDefaultColor","children","realPickerItems","Array","fill","_","idx","clickScrollViewProps","scrollIntoViewAlignment","_jsxs","ScrollView","scrollY","showScrollbar","onScroll","onTouchStart","onScrollEnd","scrollWithAnimation","PickerGroupTime","timeA11yLimitFocus","onTimeA11yLimitFocusConsumed","timeA11yLimitEventNonce","prevLimitEventNonceRef","suppressScrollSettleFocusNonceRef","pendingLimitFocusRef","limitFocusTimerRef","clearLimitFocusTimer","tryFocusPendingLimit","pending","visualIndex","isStable","attempts","nonce","schedulePendingLimitFocus","useLayoutEffect","prev","req","isLimited","Boolean","hasPendingLimitFocus","suppressByLimitNonce","PickerGroupDate","updateDay","valueText","numericValue","replace","isNaN","PickerGroupRegion","PickerGroup","mode"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
const Refresher = () => {
|
|
2
|
+
return null;
|
|
3
|
+
};
|
|
4
|
+
Refresher.displayName = 'Refresher';
|
|
2
5
|
|
|
3
|
-
|
|
4
|
-
const Refresher = View;
|
|
5
|
-
|
|
6
|
-
export { Refresher as default };
|
|
6
|
+
export { Refresher, Refresher as default };
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/refresher/index.
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/refresher/index.tsx"],"sourcesContent":["import React from 'react'\n\n/**\n * Refresher 组件 - 下拉刷新(标记组件)\n *\n * 以各平台 ScrollView 的 refresher 落地为准:\n * - weapp/jd/tt: ScrollView.refresher-enabled / bindRefresherPulling 等\n * - 本组件为标记组件,不渲染 DOM,仅向 List 等传配置;实际下拉逻辑由 List/ScrollView 内 useRefresher 或原生 refresher 处理。\n *\n * 高度规则:\n * - 无 children:使用默认 50px 高度\n * - 有 children:由 children 内容撑开高度\n *\n * children:用于替换「加载楼层」中间的显示内容;不传则使用默认文案(下拉刷新/释放刷新/加载中...)。\n * 小程序自定义需配合 refresherDefaultStyle=\"none\"。\n *\n * @example 使用默认文案(50px 高度)\n * <Refresher refresherEnabled refresherThreshold={50} onRefresherRefresh={fetchData} />\n *\n * @example 自定义内容(由内容撑开高度)\n * <Refresher refresherEnabled refresherDefaultStyle=\"none\" onRefresherRefresh={fetchData}>\n * <View style={{ height: 60, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n * <Text>下拉刷新</Text>\n * </View>\n * </Refresher>\n */\n\n/** 与 ScrollView.d.ts 的 refresher 相关属性、事件对齐 */\nexport interface RefresherProps {\n refresherEnabled?: boolean\n refresherThreshold?: number\n refresherDefaultStyle?: 'black' | 'white' | 'none'\n refresherBackground?: string\n refresherTriggered?: boolean\n /** 自定义刷新内容(替换默认「下拉刷新/释放刷新/加载中...」文案) */\n children?: React.ReactNode\n onRefresherPulling?: (e?: { detail?: { deltaY?: number } }) => void\n onRefresherRefresh?: () => void | Promise<void>\n onRefresherRestore?: () => void\n onRefresherAbort?: () => void\n onRefresherWillRefresh?: () => void\n onRefresherStatusChange?: (e?: { detail?: { status?: number, dy?: number } }) => void\n}\n\nconst Refresher: React.FC<RefresherProps> = () => {\n return null\n}\n\nRefresher.displayName = 'Refresher'\n\nexport { Refresher }\nexport default Refresher\n"],"names":["Refresher","displayName"],"mappings":"AA4CMA,MAAAA,SAAS,GAA6BA,MAAK;AAC/C,EAAA,OAAO,IAAI;AACb;AAEAA,SAAS,CAACC,WAAW,GAAG,WAAW;;;;"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import './style/index.scss.js';
|
|
2
2
|
import { isFunction } from '@tarojs/shared';
|
|
3
3
|
import classNames from 'classnames';
|
|
4
|
+
import { ScrollElementContext } from '../../contexts/ScrollElementContext.js';
|
|
4
5
|
import { throttle, createForwardRefComponent } from '../../utils/index.js';
|
|
5
|
-
import { useRef, useEffect } from '../../utils/hooks.react.js';
|
|
6
|
+
import { useRef, useState, useEffect } from '../../utils/hooks.react.js';
|
|
6
7
|
import { jsx } from 'react/jsx-runtime';
|
|
7
8
|
|
|
8
9
|
function easeOutScroll() {
|
|
@@ -30,16 +31,18 @@ function easeOutScroll() {
|
|
|
30
31
|
}
|
|
31
32
|
step();
|
|
32
33
|
}
|
|
34
|
+
/** 未开启的滚动轴使用 nearest 避免原生 scrollIntoView 沿该轴滚动整页 */
|
|
33
35
|
function scrollIntoView() {
|
|
34
36
|
let id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
35
|
-
let
|
|
36
|
-
let
|
|
37
|
-
let
|
|
37
|
+
let animated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
38
|
+
let scrollX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
39
|
+
let scrollY = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
40
|
+
let scrollIntoViewAlignment = arguments.length > 4 ? arguments[4] : undefined;
|
|
38
41
|
var _a;
|
|
39
42
|
(_a = document.querySelector(`#${id}`)) === null || _a === void 0 ? void 0 : _a.scrollIntoView({
|
|
40
43
|
behavior: animated ? 'smooth' : 'auto',
|
|
41
|
-
block:
|
|
42
|
-
inline:
|
|
44
|
+
block: scrollY ? scrollIntoViewAlignment || 'center' : 'nearest',
|
|
45
|
+
inline: scrollX ? scrollIntoViewAlignment || 'start' : 'nearest'
|
|
43
46
|
});
|
|
44
47
|
}
|
|
45
48
|
function scrollVertical(container, scrollTop, top, isAnimation) {
|
|
@@ -62,48 +65,65 @@ function scrollHorizontal(container, scrollLeft, left, isAnimation) {
|
|
|
62
65
|
}
|
|
63
66
|
scrollLeft.current = left;
|
|
64
67
|
}
|
|
68
|
+
/** H5 等环境下 scrollTop 为整数,与带亚像素的受控值比较时允许该误差,避免反复 set scrollTop 与 scrollIntoView 打架 */
|
|
69
|
+
const CONTROLLED_SCROLL_EPSILON = 0.5;
|
|
65
70
|
function ScrollView(props) {
|
|
71
|
+
var _a;
|
|
66
72
|
const _scrollTop = useRef(null);
|
|
67
73
|
const _scrollLeft = useRef(null);
|
|
68
74
|
const container = useRef(null);
|
|
69
75
|
const scrollEndTimerRef = useRef(null);
|
|
70
76
|
const isScrollingRef = useRef(false);
|
|
71
77
|
const isInitializedRef = useRef(false);
|
|
78
|
+
/** 与 props.scrollIntoView 比对,同 id 时只走受控 scrollTop,避免与上次锚点反复互顶 */
|
|
79
|
+
const lastAppliedScrollIntoViewIdRef = useRef(null);
|
|
80
|
+
const [containerHeight, setContainerHeight] = useState(0);
|
|
72
81
|
const onTouchMove = e => {
|
|
73
82
|
e.stopPropagation();
|
|
74
83
|
};
|
|
84
|
+
const applyControlledScrollTopLeft = p => {
|
|
85
|
+
const isAnimation = !!p.scrollWithAnimation;
|
|
86
|
+
const eps = CONTROLLED_SCROLL_EPSILON;
|
|
87
|
+
if (p.scrollY && typeof p.scrollTop === 'number' && (_scrollTop.current === null || Math.abs(p.scrollTop - _scrollTop.current) >= eps)) {
|
|
88
|
+
setTimeout(() => scrollVertical(container, _scrollTop, p.scrollTop, isAnimation), 10);
|
|
89
|
+
}
|
|
90
|
+
if (p.scrollX && typeof p.scrollLeft === 'number' && (_scrollLeft.current === null || Math.abs(p.scrollLeft - _scrollLeft.current) >= eps)) {
|
|
91
|
+
setTimeout(() => scrollHorizontal(container, _scrollLeft, p.scrollLeft, isAnimation), 10);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
75
94
|
const handleScroll = function (props) {
|
|
76
95
|
let isInit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
77
|
-
// scrollIntoView
|
|
78
96
|
if (props.scrollIntoView && typeof props.scrollIntoView === 'string' && document && document.querySelector && document.querySelector(`#${props.scrollIntoView}`)) {
|
|
79
|
-
const isHorizontal = props.scrollX && !props.scrollY;
|
|
80
97
|
if (isInit) {
|
|
81
|
-
setTimeout(() => scrollIntoView(props.scrollIntoView, props.scrollWithAnimation,
|
|
98
|
+
setTimeout(() => scrollIntoView(props.scrollIntoView, props.scrollWithAnimation, !!props.scrollX, !!props.scrollY, props.scrollIntoViewAlignment), 500);
|
|
82
99
|
} else {
|
|
83
|
-
scrollIntoView(props.scrollIntoView, props.scrollWithAnimation,
|
|
100
|
+
scrollIntoView(props.scrollIntoView, props.scrollWithAnimation, !!props.scrollX, !!props.scrollY, props.scrollIntoViewAlignment);
|
|
84
101
|
}
|
|
85
102
|
} else {
|
|
86
|
-
|
|
87
|
-
// Y 轴滚动
|
|
88
|
-
if (props.scrollY && typeof props.scrollTop === 'number' && props.scrollTop !== _scrollTop.current) {
|
|
89
|
-
setTimeout(() => scrollVertical(container, _scrollTop, props.scrollTop, isAnimation), 10);
|
|
90
|
-
}
|
|
91
|
-
// X 轴滚动
|
|
92
|
-
if (props.scrollX && typeof props.scrollLeft === 'number' && props.scrollLeft !== _scrollLeft.current) {
|
|
93
|
-
setTimeout(() => scrollHorizontal(container, _scrollLeft, props.scrollLeft, isAnimation), 10);
|
|
94
|
-
}
|
|
103
|
+
applyControlledScrollTopLeft(props);
|
|
95
104
|
}
|
|
96
105
|
};
|
|
97
106
|
useEffect(() => {
|
|
98
107
|
handleScroll(props, true);
|
|
99
108
|
isInitializedRef.current = true;
|
|
100
109
|
}, []);
|
|
101
|
-
//
|
|
110
|
+
// scrollTop / scrollLeft / scrollIntoView 受控同步(跳过 mount 时的 init effect)
|
|
102
111
|
useEffect(() => {
|
|
103
|
-
if (isInitializedRef.current
|
|
104
|
-
|
|
112
|
+
if (!isInitializedRef.current || !container.current) return;
|
|
113
|
+
const sitv = props.scrollIntoView;
|
|
114
|
+
const sitvOk = Boolean(sitv && typeof sitv === 'string' && document && document.querySelector && document.querySelector(`#${sitv}`));
|
|
115
|
+
if (sitvOk) {
|
|
116
|
+
if (sitv !== lastAppliedScrollIntoViewIdRef.current) {
|
|
117
|
+
scrollIntoView(sitv, props.scrollWithAnimation, !!props.scrollX, !!props.scrollY, props.scrollIntoViewAlignment);
|
|
118
|
+
lastAppliedScrollIntoViewIdRef.current = typeof sitv === 'string' ? sitv : null;
|
|
119
|
+
} else {
|
|
120
|
+
applyControlledScrollTopLeft(props);
|
|
121
|
+
}
|
|
122
|
+
} else {
|
|
123
|
+
lastAppliedScrollIntoViewIdRef.current = null;
|
|
124
|
+
applyControlledScrollTopLeft(props);
|
|
105
125
|
}
|
|
106
|
-
}, [props.scrollTop, props.scrollLeft, props.scrollIntoView]);
|
|
126
|
+
}, [props.scrollTop, props.scrollLeft, props.scrollIntoView, props.scrollIntoViewAlignment, props.scrollWithAnimation, props.scrollX, props.scrollY]);
|
|
107
127
|
const {
|
|
108
128
|
className,
|
|
109
129
|
style = {},
|
|
@@ -213,20 +233,44 @@ function ScrollView(props) {
|
|
|
213
233
|
}
|
|
214
234
|
};
|
|
215
235
|
}, []);
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
236
|
+
// ScrollElementContext:嵌套滚动时向子组件提供 scrollRef、containerHeight、startOffset
|
|
237
|
+
useEffect(() => {
|
|
238
|
+
const el = container.current;
|
|
239
|
+
if (!el) return;
|
|
240
|
+
const update = () => {
|
|
241
|
+
if (container.current) {
|
|
242
|
+
setContainerHeight(container.current.clientHeight);
|
|
221
243
|
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
244
|
+
};
|
|
245
|
+
update();
|
|
246
|
+
const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(update) : null;
|
|
247
|
+
if (ro) {
|
|
248
|
+
ro.observe(el);
|
|
249
|
+
return () => ro.disconnect();
|
|
250
|
+
}
|
|
251
|
+
}, []);
|
|
252
|
+
const scrollElementContextValue = {
|
|
253
|
+
scrollRef: container,
|
|
254
|
+
containerHeight,
|
|
255
|
+
startOffset: (_a = props.startOffset) !== null && _a !== void 0 ? _a : 0
|
|
256
|
+
};
|
|
257
|
+
return /*#__PURE__*/jsx(ScrollElementContext.Provider, {
|
|
258
|
+
value: scrollElementContextValue,
|
|
259
|
+
children: /*#__PURE__*/jsx("div", {
|
|
260
|
+
ref: e => {
|
|
261
|
+
if (e) {
|
|
262
|
+
container.current = e;
|
|
263
|
+
if (props.forwardedRef) props.forwardedRef.current = e;
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
style: style,
|
|
267
|
+
className: cls,
|
|
268
|
+
onScroll: _onScroll,
|
|
269
|
+
onTouchMove: _onTouchMove,
|
|
270
|
+
onTouchStart: _onTouchStart,
|
|
271
|
+
onTouchEnd: _onTouchEnd,
|
|
272
|
+
children: props.children
|
|
273
|
+
})
|
|
230
274
|
});
|
|
231
275
|
}
|
|
232
276
|
var index = createForwardRefComponent(ScrollView);
|