@@ -16,7 +16,6 @@ import { never } from "../assert.js";
16
16
import constants from "../constans.js" ;
17
17
import Logger from "../logger.js" ;
18
18
import settings from "../settings.js" ;
19
- import utils from "../utils.js" ;
20
19
21
20
22
21
/**
@@ -167,53 +166,28 @@ const SwipeEventHandler = (() => {
167
166
return ( has_touch || ( has_pointer && settings . scroll . swipeScroll ) ) ;
168
167
}
169
168
170
- /** @param event {TouchEvent} */
171
- function _handlePointerTouch ( event ) {
172
- /**
173
- * @param element {Element}
174
- * @returns {boolean }
175
- */
176
- function _hasOverflowScroll ( element ) {
177
- if ( settings . scroll . overflowScroll ) {
178
- let scrollable = utils . tryToGetScrollableParentElement ( element ) ;
179
- if ( scrollable !== null ) {
180
- const axis = getAxis ( "vertical" ) ;
181
-
182
- if ( axis === - 1 ) return ! ( utils . hasReachedStartOfScroll ( scrollable ) ) ;
183
- if ( axis === 1 ) return ! ( utils . hasReachedEndOfScroll ( scrollable ) ) ;
184
- }
185
- }
186
-
187
- return false ;
188
- }
189
-
190
- const target = /** @type {Element | null } */ ( event . target ) ;
191
- if ( target !== null && _hasOverflowScroll ( target ) === false ) {
192
- event . preventDefault ( )
193
- }
169
+ function _isTouchDevice ( ) {
170
+ return ( window . matchMedia && window . matchMedia ( "(pointer: coarse)" ) . matches ) ;
194
171
}
195
172
196
173
function startListen ( ) {
197
174
if ( _isListen ) return ;
198
175
199
- if ( ( window ?. PointerEvent && settings . scroll . swipeScroll ) || window ?. TouchEvent ) {
176
+ // Add pointer event listeners for non-touch devices if swipe scroll is enabled
177
+ if ( ( window ?. PointerEvent && settings . scroll . swipeScroll ) && ! _isTouchDevice ( ) ) {
200
178
document . addEventListener ( "pointerdown" , _handleSwipeStart , false ) ;
201
179
document . addEventListener ( "pointermove" , _handleSwipeMove , false ) ;
202
180
document . addEventListener ( "pointerup" , _handleSwipeEnd , false ) ;
203
181
document . addEventListener ( "pointercancel" , _handleSwipeEnd , false ) ;
204
182
205
- if ( window ?. TouchEvent ) {
206
- document . addEventListener ( "touchstart" , _handlePointerTouch , { passive : false } ) ;
207
- }
208
-
209
183
Logger . debug ( "SwipeEventHandler: pointer event listeners [started]" ) ;
210
184
}
211
185
212
- // Fallback to touch if pointer event is not supported (android/ios)
213
- if ( window ?. TouchEvent && ( typeof window ?. PointerEvent ) === "undefined" ) {
186
+ // Add touch event listeners for touch-enabled devices
187
+ if ( window ?. TouchEvent && _isTouchDevice ( ) ) {
214
188
document . addEventListener ( "touchstart" , _handleSwipeStart , false ) ;
215
189
document . addEventListener ( "touchend" , _handleSwipeEnd , false ) ;
216
- document . addEventListener ( "touchmove" , event => event . preventDefault ( ) , false ) ;
190
+ document . addEventListener ( "touchmove" , _handleSwipeMove , false ) ;
217
191
document . addEventListener ( "touchcancel" , _handleSwipeEnd , false ) ;
218
192
219
193
Logger . debug ( "SwipeEventHandler: touch event listeners [started]" ) ;
@@ -225,24 +199,22 @@ const SwipeEventHandler = (() => {
225
199
function stopListen ( ) {
226
200
if ( ! _isListen ) return ;
227
201
228
- if ( ( window ?. PointerEvent && settings . scroll . swipeScroll ) || window ?. TouchEvent ) {
202
+ // Remove pointer event listeners for non-touch devices if swipe scroll is enabled
203
+ if ( ( window ?. PointerEvent && settings . scroll . swipeScroll ) && typeof window ?. TouchEvent === "undefined" ) {
229
204
document . removeEventListener ( "pointerdown" , _handleSwipeStart , false ) ;
230
205
document . removeEventListener ( "pointermove" , _handleSwipeMove , false ) ;
231
206
document . removeEventListener ( "pointerup" , _handleSwipeEnd , false ) ;
232
207
document . removeEventListener ( "pointercancel" , _handleSwipeEnd , false ) ;
233
208
234
- if ( window ?. TouchEvent ) {
235
- document . removeEventListener ( "touchstart" , _handlePointerTouch ) ;
236
- }
237
-
238
209
Logger . debug ( "SwipeEventHandler: pointer event listeners [stoped]" ) ;
239
210
}
240
211
241
- // Fallback to touch if pointer event is not supported (android/ios)
242
- if ( window ?. TouchEvent && ( typeof window ?. PointerEvent ) === "undefined" ) {
212
+ // Remove touch event listeners for touch-enabled devices
213
+ if ( window ?. TouchEvent ) {
243
214
document . removeEventListener ( "touchstart" , _handleSwipeStart , false ) ;
244
215
document . removeEventListener ( "touchend" , _handleSwipeEnd , false ) ;
245
- document . removeEventListener ( "touchmove" , event => event . preventDefault ( ) , false ) ;
216
+ document . removeEventListener ( "touchmove" , _handleSwipeMove , false ) ;
217
+ document . removeEventListener ( "touchcancel" , _handleSwipeEnd , false ) ;
246
218
247
219
Logger . debug ( "SwipeEventHandler: touch event listeners [stopped]" ) ;
248
220
}
0 commit comments