Compare commits

...

2 Commits

Author SHA1 Message Date
neverland
717f244d2f
fix: reduce passive event warning of touchstart event (#10954) 2022-08-21 22:08:27 +08:00
neverland
6b7ae0f6a0
types(@vant/use): improve useEventListener typing (#10952) 2022-08-21 17:49:48 +08:00
14 changed files with 36 additions and 21 deletions

View File

@ -10,6 +10,16 @@ export type UseEventListenerOptions = {
passive?: boolean;
};
export function useEventListener<K extends keyof DocumentEventMap>(
type: K,
listener: (event: DocumentEventMap[K]) => void,
options?: UseEventListenerOptions
): void;
export function useEventListener(
type: string,
listener: EventListener,
options?: UseEventListenerOptions
): void;
export function useEventListener(
type: string,
listener: EventListener,
@ -27,7 +37,10 @@ export function useEventListener(
const element = unref(target);
if (element && !attached) {
element.addEventListener(type, listener, { capture, passive });
element.addEventListener(type, listener, {
capture,
passive,
});
attached = true;
}
};

View File

@ -279,7 +279,7 @@ export default defineComponent({
return (
<SwipeItem
class={bem('swipe-item')}
onTouchstart={onTouchStart}
onTouchstartPassive={onTouchStart}
onTouchmove={onTouchMove}
onTouchend={onTouchEnd}
onTouchcancel={onTouchEnd}

View File

@ -275,7 +275,7 @@ export default defineComponent({
class={bem('sidebar')}
style={sidebarStyle.value}
onClick={onClickSidebar}
onTouchstart={touch.start}
onTouchstartPassive={touch.start}
onTouchmove={onTouchMove}
>
{renderIndexes()}

View File

@ -280,10 +280,8 @@ export default defineComponent({
unfit: !props.safeAreaInsetBottom,
'with-title': !!Title,
})}
onTouchstart={stopPropagation}
onAnimationend={onAnimationEnd}
// @ts-ignore
onWebkitAnimationEnd={onAnimationEnd}
onTouchstartPassive={stopPropagation}
>
{Title}
<div class={bem('body')}>

View File

@ -88,8 +88,8 @@ export default defineComponent({
return () => (
<div
class={bem('wrapper', { wider: props.wider })}
onTouchstart={onTouchStart}
onTouchmove={onTouchMove}
onTouchstartPassive={onTouchStart}
onTouchmovePassive={onTouchMove}
onTouchend={onTouchEnd}
onTouchcancel={onTouchEnd}
>

View File

@ -78,7 +78,7 @@ export default defineComponent({
<div class={bem()}>
<ul
class={[bem('security'), { [BORDER_SURROUND]: !props.gutter }]}
onTouchstart={onTouchStart}
onTouchstartPassive={onTouchStart}
>
{renderPoints()}
</ul>

View File

@ -308,7 +308,7 @@ export default defineComponent({
return () => (
<div
class={[bem(), props.className]}
onTouchstart={onTouchStart}
onTouchstartPassive={onTouchStart}
onTouchmove={onTouchMove}
onTouchend={onTouchEnd}
onTouchcancel={onTouchEnd}

View File

@ -221,12 +221,8 @@ export default defineComponent({
}
);
// add passive option to avoid Chrome warning
useEventListener('touchstart', onTouchStart as EventListener, {
target: track,
passive: true,
});
useEventListener('touchmove', onTouchMove as EventListener, {
// useEventListener will set passive to `false` to eliminate the warning of Chrome
useEventListener('touchmove', onTouchMove, {
target: track,
});
@ -244,6 +240,7 @@ export default defineComponent({
ref={track}
class={bem('track')}
style={trackStyle}
onTouchstartPassive={onTouchStart}
onTouchend={onTouchEnd}
onTouchcancel={onTouchEnd}
>

View File

@ -279,7 +279,7 @@ export default defineComponent({
tabindex={props.disabled ? undefined : 0}
aria-disabled={props.disabled}
aria-readonly={props.readonly}
onTouchstart={onTouchStart}
onTouchstartPassive={onTouchStart}
onTouchmove={onTouchMove}
>
{list.value.map(renderStar)}

View File

@ -301,7 +301,7 @@ export default defineComponent({
aria-disabled={props.disabled || undefined}
aria-readonly={props.readonly || undefined}
aria-orientation={props.vertical ? 'vertical' : 'horizontal'}
onTouchstart={(event) => {
onTouchstartPassive={(event) => {
if (typeof index === 'number') {
// save index of current button
buttonIndex = index;

View File

@ -259,7 +259,7 @@ export default defineComponent({
actionType = type;
onChange();
},
onTouchstart: () => {
onTouchstartPassive: () => {
actionType = type;
onTouchStart();
},

View File

@ -220,7 +220,7 @@ export default defineComponent({
ref={root}
class={bem()}
onClick={getClickHandler('cell', lockClick)}
onTouchstart={onTouchStart}
onTouchstartPassive={onTouchStart}
onTouchmove={onTouchMove}
onTouchend={onTouchEnd}
onTouchcancel={onTouchEnd}

View File

@ -440,7 +440,7 @@ export default defineComponent({
<div
style={trackStyle.value}
class={bem('track', { vertical: props.vertical })}
onTouchstart={onTouchStart}
onTouchstartPassive={onTouchStart}
onTouchmove={onTouchMove}
onTouchend={onTouchEnd}
onTouchcancel={onTouchEnd}

View File

@ -12,5 +12,12 @@ declare module 'vue' {
onTouchmove?: EventHandler;
onTouchstart?: EventHandler;
onTouchcancel?: EventHandler;
onTouchmovePassive?: EventHandler;
onTouchstartPassive?: EventHandler;
}
interface HTMLAttributes {
onTouchmovePassive?: EventHandler;
onTouchstartPassive?: EventHandler;
}
}