![Eduard Kuzmenko](/assets/img/avatar_default.png)
Fix bluring keyboard on Android Fix reading messages when page was blured Fix instant reading messages if there only one page of them Split dom functions
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
/*
|
|
* https://github.com/morethanwords/tweb
|
|
* Copyright (C) 2019-2021 Eduard Kuzmenko
|
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE
|
|
*/
|
|
|
|
import type ListenerSetter from "../listenerSetter";
|
|
import { isTouchSupported } from "../touchSupport";
|
|
|
|
export default function handleScrollSideEvent(elem: HTMLElement, side: 'top' | 'bottom', callback: () => void, listenerSetter: ListenerSetter) {
|
|
if(isTouchSupported) {
|
|
let lastY: number;
|
|
const options = {passive: true};
|
|
listenerSetter.add(elem, 'touchstart', (e) => {
|
|
if(e.touches.length > 1) {
|
|
onTouchEnd();
|
|
return;
|
|
}
|
|
|
|
lastY = e.touches[0].clientY;
|
|
|
|
listenerSetter.add(elem, 'touchmove', onTouchMove, options);
|
|
listenerSetter.add(elem, 'touchend', onTouchEnd, options);
|
|
}, options);
|
|
|
|
const onTouchMove = (e: TouchEvent) => {
|
|
const clientY = e.touches[0].clientY;
|
|
|
|
const isDown = clientY < lastY;
|
|
if(side === 'bottom' && isDown) callback();
|
|
else if(side === 'top' && !isDown) callback();
|
|
lastY = clientY;
|
|
//alert('isDown: ' + !!isDown);
|
|
};
|
|
|
|
const onTouchEnd = () => {
|
|
listenerSetter.removeManual(elem, 'touchmove', onTouchMove, options);
|
|
listenerSetter.removeManual(elem, 'touchend', onTouchEnd, options);
|
|
};
|
|
} else {
|
|
listenerSetter.add(elem, 'wheel', (e) => {
|
|
const isDown = e.deltaY > 0;
|
|
//this.log('wheel', e, isDown);
|
|
if(side === 'bottom' && isDown) callback();
|
|
else if(side === 'top' && !isDown) callback();
|
|
}, {passive: true});
|
|
}
|
|
}
|