Skip to content

Commit 6ff0866

Browse files
committed
feat(core): make focusableElements configurable
fixes #4677
1 parent 1285195 commit 6ff0866

File tree

11 files changed

+18
-4
lines changed

11 files changed

+18
-4
lines changed

src/angular/src/swiper.component.ts

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export class SwiperComponent implements OnInit {
6060
@Input() updateOnWindowResize: SwiperOptions['updateOnWindowResize'];
6161
@Input() resizeObserver: SwiperOptions['resizeObserver'];
6262
@Input() nested: SwiperOptions['nested'];
63+
@Input() focusableElements: SwiperOptions['focusableElements'];
6364
@Input() width: SwiperOptions['width'];
6465
@Input() height: SwiperOptions['height'];
6566
@Input() preventInteractionOnTransition: SwiperOptions['preventInteractionOnTransition'];

src/angular/src/utils/params-list.ts

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export const paramsList = [
99
'updateOnWindowResize',
1010
'resizeObserver',
1111
'nested',
12+
'focusableElements',
1213
'_width',
1314
'_height',
1415
'preventInteractionOnTransition',

src/components/core/core-class.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ class Swiper {
207207
startTranslate: undefined,
208208
allowThresholdMove: undefined,
209209
// Form elements to match
210-
formElements: 'input, select, option, textarea, button, video, label',
210+
focusableElements: swiper.params.focusableElements,
211211
// Last click time
212212
lastClickTime: now(),
213213
clickTimeout: undefined,

src/components/core/defaults.js

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export default {
1010
nested: false,
1111
createElements: false,
1212
enabled: true,
13+
focusableElements: 'input, select, option, textarea, button, video, label',
1314

1415
// Overrides
1516
width: null,

src/components/core/events/onTouchMove.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export default function onTouchMove(event) {
5959
}
6060
}
6161
if (data.isTouchEvent && document.activeElement) {
62-
if (e.target === document.activeElement && $(e.target).is(data.formElements)) {
62+
if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {
6363
data.isMoved = true;
6464
swiper.allowClick = false;
6565
return;

src/components/core/events/onTouchStart.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,10 @@ export default function onTouchStart(event) {
8383
if (params.threshold > 0) data.allowThresholdMove = false;
8484
if (e.type !== 'touchstart') {
8585
let preventDefault = true;
86-
if ($targetEl.is(data.formElements)) preventDefault = false;
86+
if ($targetEl.is(data.focusableElements)) preventDefault = false;
8787
if (
8888
document.activeElement &&
89-
$(document.activeElement).is(data.formElements) &&
89+
$(document.activeElement).is(data.focusableElements) &&
9090
document.activeElement !== $targetEl[0]
9191
) {
9292
document.activeElement.blur();

src/react/params-list.js

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const paramsList = [
99
'updateOnWindowResize',
1010
'resizeObserver',
1111
'nested',
12+
'focusableElements',
1213
'_enabled',
1314
'_width',
1415
'_height',

src/svelte/params-list.js

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const paramsList = [
99
'updateOnWindowResize',
1010
'resizeObserver',
1111
'nested',
12+
'focusableElements',
1213
'_enabled',
1314
'_width',
1415
'_height',

src/types/swiper-options.d.ts

+7
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,13 @@ export interface SwiperOptions {
139139
*/
140140
createElements?: boolean;
141141

142+
/**
143+
* CSS selector for focusable elements. Swiping will be disabled on such elements if they are "focused"
144+
*
145+
* @default 'input, select, option, textarea, button, video, label'
146+
*/
147+
focusableElements?: string;
148+
142149
/**
143150
* If enabled (by default) and navigation elements' parameters passed as a string (like `".pagination"`)
144151
* then Swiper will look for such elements through child elements first.

src/vue/params-list.js

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const paramsList = [
99
'updateOnWindowResize',
1010
'resizeObserver',
1111
'nested',
12+
'focusableElements',
1213
'_enabled',
1314
'_width',
1415
'_height',

src/vue/swiper.js

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const Swiper = {
2929
updateOnWindowResize: { type: Boolean, default: undefined },
3030
resizeObserver: { type: Boolean, default: undefined },
3131
nested: { type: Boolean, default: undefined },
32+
focusableElements: { type: Boolean, default: undefined },
3233
width: { type: Number, default: undefined },
3334
height: { type: Number, default: undefined },
3435
preventInteractionOnTransition: { type: Boolean, default: undefined },

0 commit comments

Comments
 (0)