Skip to content

Commit 3647853

Browse files
authored
Merge pull request #2156 from didi/fix-scroll-view-drag
fix: 修改 scrollView 组件 dragStart、dragEnd 事件触发机制
2 parents bd38894 + ea84ef2 commit 3647853

File tree

1 file changed

+30
-35
lines changed

1 file changed

+30
-35
lines changed

packages/webpack-plugin/lib/runtime/components/react/mpx-scroll-view.tsx

Lines changed: 30 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -455,22 +455,6 @@ const _ScrollView = forwardRef<HandlerRef<ScrollView & View, ScrollViewProps>, S
455455
}
456456
}
457457

458-
function onScrollTouchStart (e: NativeSyntheticEvent<TouchEvent>) {
459-
const { bindtouchstart } = props
460-
bindtouchstart && bindtouchstart(e)
461-
if (enhanced) {
462-
binddragstart &&
463-
binddragstart(
464-
getCustomEvent('dragstart', e, {
465-
detail: {
466-
scrollLeft: scrollOptions.current.scrollLeft,
467-
scrollTop: scrollOptions.current.scrollTop
468-
},
469-
layoutRef
470-
}, props)
471-
)
472-
}
473-
}
474458
function onScrollTouchMove (e: NativeSyntheticEvent<TouchEvent>) {
475459
bindtouchmove && bindtouchmove(e)
476460
if (enhanced) {
@@ -487,22 +471,6 @@ const _ScrollView = forwardRef<HandlerRef<ScrollView & View, ScrollViewProps>, S
487471
}
488472
}
489473

490-
function onScrollTouchEnd (e: NativeSyntheticEvent<TouchEvent>) {
491-
bindtouchend && bindtouchend(e)
492-
if (enhanced) {
493-
binddragend &&
494-
binddragend(
495-
getCustomEvent('dragend', e, {
496-
detail: {
497-
scrollLeft: scrollOptions.current.scrollLeft || 0,
498-
scrollTop: scrollOptions.current.scrollTop || 0
499-
},
500-
layoutRef
501-
}, props)
502-
)
503-
}
504-
}
505-
506474
function onScrollDrag (e: NativeSyntheticEvent<NativeScrollEvent>) {
507475
const { x: scrollLeft, y: scrollTop } = e.nativeEvent.contentOffset
508476
updateScrollOptions(e, { scrollLeft, scrollTop })
@@ -523,6 +491,35 @@ const _ScrollView = forwardRef<HandlerRef<ScrollView & View, ScrollViewProps>, S
523491
hasCallScrollToLower.current = false
524492
hasCallScrollToUpper.current = false
525493
onScrollDrag(e)
494+
if (enhanced) {
495+
binddragstart &&
496+
binddragstart(
497+
getCustomEvent('dragstart', e, {
498+
detail: {
499+
scrollLeft: scrollOptions.current.scrollLeft,
500+
scrollTop: scrollOptions.current.scrollTop
501+
},
502+
layoutRef
503+
}, props)
504+
)
505+
}
506+
}
507+
508+
function onScrollDragEnd (e: NativeSyntheticEvent<NativeScrollEvent>) {
509+
onScrollDrag(e)
510+
if (enhanced) {
511+
// 安卓上如果触发了默认的下拉刷新,binddragend可能不触发,只会触发 binddragstart
512+
binddragend &&
513+
binddragend(
514+
getCustomEvent('dragend', e, {
515+
detail: {
516+
scrollLeft: scrollOptions.current.scrollLeft || 0,
517+
scrollTop: scrollOptions.current.scrollTop || 0
518+
},
519+
layoutRef
520+
}, props)
521+
)
522+
}
526523
}
527524

528525
// 处理刷新
@@ -695,11 +692,9 @@ const _ScrollView = forwardRef<HandlerRef<ScrollView & View, ScrollViewProps>, S
695692
ref: scrollViewRef,
696693
onScroll: enableSticky ? scrollHandler : onScroll,
697694
onContentSizeChange: onContentSizeChange,
698-
bindtouchstart: ((enhanced && binddragstart) || bindtouchstart) && onScrollTouchStart,
699695
bindtouchmove: ((enhanced && binddragging) || bindtouchmove) && onScrollTouchMove,
700-
bindtouchend: ((enhanced && binddragend) || bindtouchend) && onScrollTouchEnd,
701696
onScrollBeginDrag: onScrollDragStart,
702-
onScrollEndDrag: onScrollDrag,
697+
onScrollEndDrag: onScrollDragEnd,
703698
onMomentumScrollEnd: onScrollEnd
704699
},
705700
(simultaneousHandlers ? { simultaneousHandlers } : {}),

0 commit comments

Comments
 (0)