Skip to content

Commit 32e3ac1

Browse files
committed
Fix dragging.
1 parent b543d60 commit 32e3ac1

File tree

5 files changed

+20
-27
lines changed

5 files changed

+20
-27
lines changed

dist/vueperslides.js

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@
366366
clones: [],
367367
mouseDown: false,
368368
mouseOver: false,
369-
touch: { enabled: true, dragging: false, dragStartX: 0, dragAmount: 0 },
369+
touch: { enabled: true, dragging: false, dragStartX: 0, dragNowX: 0, dragAmount: 0 },
370370
transition: { currentTranslation: 0, speed: 0, animated: false },
371371
timer: null,
372372
arrowPrevDisabled: false,
@@ -646,14 +646,17 @@
646646
this.cloneSlides();
647647
}
648648

649+
// Store current drag position in var for distance calculation in onMouseUp().
650+
this.touch.dragNowX = this.getCurrentMouseX(e);
651+
649652
if (this.conf.draggingDistance) {
650-
this.touch.dragAmount = this.getDragAmount(e);
653+
this.touch.dragAmount = this.touch.dragNowX - this.touch.dragStartX;
651654
var dragAmountPercentage = this.touch.dragAmount / this.container.clientWidth;
652655

653656
this.updateCurrentTranslation();
654657
this.transition.currentTranslation += 100 * dragAmountPercentage;
655658
} else {
656-
this.updateCurrentTranslation(null, this.getCurrentMouseX(e));
659+
this.updateCurrentTranslation(null, this.touch.dragNowX);
657660
}
658661
}
659662
},
@@ -667,7 +670,7 @@
667670
var dragAmount = this.conf.draggingDistance ? -this.touch.dragAmount : 0;
668671
var realCurrentSlideIndex = this.slides.current + !!this.clones.length * 1; // Takes clones in account if any.
669672
var dragPercentageStart = (this.touch.dragStartX - this.container.offsetLeft) / this.container.clientWidth;
670-
var dragPercentageNow = (this.getCurrentMouseX(e) - this.container.offsetLeft) / this.container.clientWidth;
673+
var dragPercentageNow = (this.touch.dragNowX - this.container.offsetLeft) / this.container.clientWidth;
671674
var dragPercentage = ((dragPercentageStart < 0.5 ? 0 : 1) - dragPercentageNow) * 100;
672675
var forwards = (dragAmount || dragPercentage) > 0;
673676

@@ -691,6 +694,7 @@
691694
} else this.cancelSlideChange();
692695

693696
this.touch.dragStartX = null;
697+
this.touch.dragNowX = null;
694698
this.touch.dragAmount = null;
695699
// this.enableScroll()
696700
},
@@ -707,14 +711,6 @@
707711
},
708712

709713

710-
/**
711-
* Return the x distance in pixel between drag start and current drag position.
712-
*/
713-
getDragAmount: function getDragAmount(e) {
714-
return ('ontouchstart' in window ? e.touches[0].clientX : e.clientX) - this.touch.dragStartX;
715-
},
716-
717-
718714
/**
719715
* The translation of most cases, in other cases this can still be used as a base calc.
720716
*/
@@ -1296,7 +1292,7 @@
12961292
/* style */
12971293
var __vue_inject_styles__$1 = function __vue_inject_styles__(inject) {
12981294
if (!inject) return;
1299-
inject("data-v-f2e9e65c_0", { source: "\n.vueperslides {\n position: relative;\n}\n.vueperslides--fixed-height .vueperslides__inner,\n .vueperslides--fixed-height .vueperslides__parallax-wrapper,\n .vueperslides--fixed-height .vueperslide {\n height: inherit;\n}\n.vueperslides--fixed-height .vueperslides__parallax-wrapper {\n padding-bottom: 0 !important;\n}\n.vueperslides__inner {\n position: relative;\n user-select: none;\n}\n.vueperslides__parallax-wrapper {\n position: relative;\n overflow: hidden;\n}\n.vueperslides__track {\n position: absolute;\n top: 0;\n height: 100%;\n left: 0;\n right: 0;\n overflow: hidden;\n z-index: 1;\n}\n.vueperslides--parallax .vueperslides__track {\n height: 200%;\n transform: translateY(0);\n}\n.vueperslides--touchable .vueperslides__track {\n cursor: ew-resize;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.vueperslides--touchable .vueperslides__track--mousedown, .vueperslides--touchable .vueperslides__track--dragging {\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n.vueperslides__track-inner {\n white-space: nowrap;\n transition: 0.5s ease-in-out transform;\n height: 100%;\n}\n.vueperslides--fade .vueperslides__track-inner {\n white-space: normal;\n transition: none;\n}\n.vueperslides__track--mousedown .vueperslides__track-inner {\n transition: 0.2s ease-in-out transform !important;\n}\n.vueperslides__track--dragging .vueperslides__track-inner {\n transition: none;\n}\n.vueperslides__track--no-animation .vueperslides__track-inner {\n transition-duration: 0s;\n}\n.vueperslides__arrow {\n position: absolute;\n fill: currentColor;\n width: 1em;\n text-align: center;\n transform: translateY(-50%);\n transition: 0.3s ease-in-out;\n cursor: pointer;\n user-select: none;\n outline: none;\n z-index: 2;\n}\n.vueperslides__paused {\n position: absolute;\n transition: 0.3s ease-in-out;\n}\n.vueperslides__bullets {\n display: flex;\n justify-content: center;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n}\n.vueperslides__bullets--outside {\n position: relative;\n}\n.vueperslides__bullet {\n cursor: pointer;\n user-select: none;\n outline: none;\n z-index: 2;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.vueperslides__bullet::-moz-focus-inner {\n border: 0;\n}\n\n/*# sourceMappingURL=VueperSlides.vue.map */", map: { "version": 3, "sources": ["/Users/anto/Programming/localhost/vueper-slides/src/components/VueperSlides.vue", "VueperSlides.vue"], "names": [], "mappings": ";AAo0BA;EACA,mBAAA;CAqHA;AAnHA;;;IAIA,gBAAA;CACA;AALA;IAQA,6BAAA;CACA;AAGA;IACA,mBAAA;IACA,kBAAA;CACA;AAEA;IACA,mBAAA;IACA,iBAAA;CACA;AAEA;IACA,mBAAA;IACA,OAAA;IACA,aAAA;IACA,QAAA;IACA,SAAA;IACA,iBAAA;IACA,WAAA;CAiBA;AAfA;MACA,aAAA;MACA,yBAAA;CACA;AAEA;MACA,kBAAA;MACA,qBAAA;MACA,aAAA;CAMA;AATA;QAMA,yBAAA;QACA,iBAAA;CACA;AAIA;IACA,oBAAA;IACA,uCAAA;IACA,aAAA;CAkBA;AAhBA;MACA,oBAAA;MACA,iBAAA;CACA;AAEA;MACA,kDAAA;CACA;AAEA;MACA,iBAAA;CACA;AAEA;MACA,wBAAA;CACA;AAGA;IACA,mBAAA;IACA,mBAAA;IACA,WAAA;IACA,mBAAA;IACA,4BAAA;IACA,6BAAA;IACA,gBAAA;IACA,kBAAA;IACA,cAAA;IACA,WAAA;CACA;AAEA;IACA,mBAAA;IACA,6BAAA;CACA;AAEA;IACA,cAAA;IACA,wBAAA;IACA,mBAAA;IACA,UAAA;IACA,QAAA;IACA,SAAA;CAKA;AAHA;MACA,mBAAA;CACA;AAGA;IACA,gBAAA;IACA,kBAAA;IACA,cAAA;IACA,WAAA;IACA,cAAA;IACA,wBAAA;IACA,oBAAA;CAKA;AAZA;MAUA,UAAA;CACA;;ACz2BA,4CAA4C", "file": "VueperSlides.vue", "sourcesContent": [null, ".vueperslides {\n position: relative; }\n .vueperslides--fixed-height .vueperslides__inner,\n .vueperslides--fixed-height .vueperslides__parallax-wrapper,\n .vueperslides--fixed-height .vueperslide {\n height: inherit; }\n .vueperslides--fixed-height .vueperslides__parallax-wrapper {\n padding-bottom: 0 !important; }\n .vueperslides__inner {\n position: relative;\n user-select: none; }\n .vueperslides__parallax-wrapper {\n position: relative;\n overflow: hidden; }\n .vueperslides__track {\n position: absolute;\n top: 0;\n height: 100%;\n left: 0;\n right: 0;\n overflow: hidden;\n z-index: 1; }\n .vueperslides--parallax .vueperslides__track {\n height: 200%;\n transform: translateY(0); }\n .vueperslides--touchable .vueperslides__track {\n cursor: ew-resize;\n cursor: -webkit-grab;\n cursor: grab; }\n .vueperslides--touchable .vueperslides__track--mousedown, .vueperslides--touchable .vueperslides__track--dragging {\n cursor: -webkit-grabbing;\n cursor: grabbing; }\n .vueperslides__track-inner {\n white-space: nowrap;\n transition: 0.5s ease-in-out transform;\n height: 100%; }\n .vueperslides--fade .vueperslides__track-inner {\n white-space: normal;\n transition: none; }\n .vueperslides__track--mousedown .vueperslides__track-inner {\n transition: 0.2s ease-in-out transform !important; }\n .vueperslides__track--dragging .vueperslides__track-inner {\n transition: none; }\n .vueperslides__track--no-animation .vueperslides__track-inner {\n transition-duration: 0s; }\n .vueperslides__arrow {\n position: absolute;\n fill: currentColor;\n width: 1em;\n text-align: center;\n transform: translateY(-50%);\n transition: 0.3s ease-in-out;\n cursor: pointer;\n user-select: none;\n outline: none;\n z-index: 2; }\n .vueperslides__paused {\n position: absolute;\n transition: 0.3s ease-in-out; }\n .vueperslides__bullets {\n display: flex;\n justify-content: center;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0; }\n .vueperslides__bullets--outside {\n position: relative; }\n .vueperslides__bullet {\n cursor: pointer;\n user-select: none;\n outline: none;\n z-index: 2;\n display: flex;\n justify-content: center;\n align-items: center; }\n .vueperslides__bullet::-moz-focus-inner {\n border: 0; }\n\n/*# sourceMappingURL=VueperSlides.vue.map */"] }, media: undefined });
1295+
inject("data-v-0c9dd9df_0", { source: "\n.vueperslides {\n position: relative;\n}\n.vueperslides--fixed-height .vueperslides__inner,\n .vueperslides--fixed-height .vueperslides__parallax-wrapper,\n .vueperslides--fixed-height .vueperslide {\n height: inherit;\n}\n.vueperslides--fixed-height .vueperslides__parallax-wrapper {\n padding-bottom: 0 !important;\n}\n.vueperslides__inner {\n position: relative;\n user-select: none;\n}\n.vueperslides__parallax-wrapper {\n position: relative;\n overflow: hidden;\n}\n.vueperslides__track {\n position: absolute;\n top: 0;\n height: 100%;\n left: 0;\n right: 0;\n overflow: hidden;\n z-index: 1;\n}\n.vueperslides--parallax .vueperslides__track {\n height: 200%;\n transform: translateY(0);\n}\n.vueperslides--touchable .vueperslides__track {\n cursor: ew-resize;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.vueperslides--touchable .vueperslides__track--mousedown, .vueperslides--touchable .vueperslides__track--dragging {\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n.vueperslides__track-inner {\n white-space: nowrap;\n transition: 0.5s ease-in-out transform;\n height: 100%;\n}\n.vueperslides--fade .vueperslides__track-inner {\n white-space: normal;\n transition: none;\n}\n.vueperslides__track--mousedown .vueperslides__track-inner {\n transition: 0.2s ease-in-out transform !important;\n}\n.vueperslides__track--dragging .vueperslides__track-inner {\n transition: none;\n}\n.vueperslides__track--no-animation .vueperslides__track-inner {\n transition-duration: 0s;\n}\n.vueperslides__arrow {\n position: absolute;\n fill: currentColor;\n width: 1em;\n text-align: center;\n transform: translateY(-50%);\n transition: 0.3s ease-in-out;\n cursor: pointer;\n user-select: none;\n outline: none;\n z-index: 2;\n}\n.vueperslides__paused {\n position: absolute;\n transition: 0.3s ease-in-out;\n}\n.vueperslides__bullets {\n display: flex;\n justify-content: center;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n}\n.vueperslides__bullets--outside {\n position: relative;\n}\n.vueperslides__bullet {\n cursor: pointer;\n user-select: none;\n outline: none;\n z-index: 2;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.vueperslides__bullet::-moz-focus-inner {\n border: 0;\n}\n\n/*# sourceMappingURL=VueperSlides.vue.map */", map: { "version": 3, "sources": ["/Users/anto/Programming/localhost/vueper-slides/src/components/VueperSlides.vue", "VueperSlides.vue"], "names": [], "mappings": ";AAi0BA;EACA,mBAAA;CAqHA;AAnHA;;;IAIA,gBAAA;CACA;AALA;IAQA,6BAAA;CACA;AAGA;IACA,mBAAA;IACA,kBAAA;CACA;AAEA;IACA,mBAAA;IACA,iBAAA;CACA;AAEA;IACA,mBAAA;IACA,OAAA;IACA,aAAA;IACA,QAAA;IACA,SAAA;IACA,iBAAA;IACA,WAAA;CAiBA;AAfA;MACA,aAAA;MACA,yBAAA;CACA;AAEA;MACA,kBAAA;MACA,qBAAA;MACA,aAAA;CAMA;AATA;QAMA,yBAAA;QACA,iBAAA;CACA;AAIA;IACA,oBAAA;IACA,uCAAA;IACA,aAAA;CAkBA;AAhBA;MACA,oBAAA;MACA,iBAAA;CACA;AAEA;MACA,kDAAA;CACA;AAEA;MACA,iBAAA;CACA;AAEA;MACA,wBAAA;CACA;AAGA;IACA,mBAAA;IACA,mBAAA;IACA,WAAA;IACA,mBAAA;IACA,4BAAA;IACA,6BAAA;IACA,gBAAA;IACA,kBAAA;IACA,cAAA;IACA,WAAA;CACA;AAEA;IACA,mBAAA;IACA,6BAAA;CACA;AAEA;IACA,cAAA;IACA,wBAAA;IACA,mBAAA;IACA,UAAA;IACA,QAAA;IACA,SAAA;CAKA;AAHA;MACA,mBAAA;CACA;AAGA;IACA,gBAAA;IACA,kBAAA;IACA,cAAA;IACA,WAAA;IACA,cAAA;IACA,wBAAA;IACA,oBAAA;CAKA;AAZA;MAUA,UAAA;CACA;;ACt2BA,4CAA4C", "file": "VueperSlides.vue", "sourcesContent": [null, ".vueperslides {\n position: relative; }\n .vueperslides--fixed-height .vueperslides__inner,\n .vueperslides--fixed-height .vueperslides__parallax-wrapper,\n .vueperslides--fixed-height .vueperslide {\n height: inherit; }\n .vueperslides--fixed-height .vueperslides__parallax-wrapper {\n padding-bottom: 0 !important; }\n .vueperslides__inner {\n position: relative;\n user-select: none; }\n .vueperslides__parallax-wrapper {\n position: relative;\n overflow: hidden; }\n .vueperslides__track {\n position: absolute;\n top: 0;\n height: 100%;\n left: 0;\n right: 0;\n overflow: hidden;\n z-index: 1; }\n .vueperslides--parallax .vueperslides__track {\n height: 200%;\n transform: translateY(0); }\n .vueperslides--touchable .vueperslides__track {\n cursor: ew-resize;\n cursor: -webkit-grab;\n cursor: grab; }\n .vueperslides--touchable .vueperslides__track--mousedown, .vueperslides--touchable .vueperslides__track--dragging {\n cursor: -webkit-grabbing;\n cursor: grabbing; }\n .vueperslides__track-inner {\n white-space: nowrap;\n transition: 0.5s ease-in-out transform;\n height: 100%; }\n .vueperslides--fade .vueperslides__track-inner {\n white-space: normal;\n transition: none; }\n .vueperslides__track--mousedown .vueperslides__track-inner {\n transition: 0.2s ease-in-out transform !important; }\n .vueperslides__track--dragging .vueperslides__track-inner {\n transition: none; }\n .vueperslides__track--no-animation .vueperslides__track-inner {\n transition-duration: 0s; }\n .vueperslides__arrow {\n position: absolute;\n fill: currentColor;\n width: 1em;\n text-align: center;\n transform: translateY(-50%);\n transition: 0.3s ease-in-out;\n cursor: pointer;\n user-select: none;\n outline: none;\n z-index: 2; }\n .vueperslides__paused {\n position: absolute;\n transition: 0.3s ease-in-out; }\n .vueperslides__bullets {\n display: flex;\n justify-content: center;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0; }\n .vueperslides__bullets--outside {\n position: relative; }\n .vueperslides__bullet {\n cursor: pointer;\n user-select: none;\n outline: none;\n z-index: 2;\n display: flex;\n justify-content: center;\n align-items: center; }\n .vueperslides__bullet::-moz-focus-inner {\n border: 0; }\n\n/*# sourceMappingURL=VueperSlides.vue.map */"] }, media: undefined });
13001296
};
13011297
/* scoped */
13021298
var __vue_scope_id__$1 = undefined;

dist/vueperslides.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/vueperslides.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vueperslides",
3-
"version": "1.13.0",
3+
"version": "1.13.1",
44
"description": "A touch ready & responsive slideshow for Vue JS.",
55
"repository": "https://github.com/antoniandre/vueper-slides",
66
"author": "Antoni Andre <[email protected]>",

src/components/VueperSlides.vue

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ export default {
166166
clones: [],
167167
mouseDown: false,
168168
mouseOver: false,
169-
touch: { enabled: true, dragging: false, dragStartX: 0, dragAmount: 0 },
169+
touch: { enabled: true, dragging: false, dragStartX: 0, dragNowX: 0, dragAmount: 0 },
170170
transition: { currentTranslation: 0, speed: 0, animated: false },
171171
timer: null,
172172
arrowPrevDisabled: false,
@@ -420,14 +420,17 @@ export default {
420420
this.cloneSlides()
421421
}
422422
423+
// Store current drag position in var for distance calculation in onMouseUp().
424+
this.touch.dragNowX = this.getCurrentMouseX(e)
425+
423426
if (this.conf.draggingDistance) {
424-
this.touch.dragAmount = this.getDragAmount(e)
427+
this.touch.dragAmount = this.touch.dragNowX - this.touch.dragStartX
425428
let dragAmountPercentage = this.touch.dragAmount / this.container.clientWidth
426429
427430
this.updateCurrentTranslation()
428431
this.transition.currentTranslation += 100 * dragAmountPercentage
429432
} else {
430-
this.updateCurrentTranslation(null, this.getCurrentMouseX(e))
433+
this.updateCurrentTranslation(null, this.touch.dragNowX)
431434
}
432435
}
433436
},
@@ -442,7 +445,7 @@ export default {
442445
let dragAmount = this.conf.draggingDistance ? - this.touch.dragAmount : 0
443446
let realCurrentSlideIndex = this.slides.current + !!this.clones.length * 1// Takes clones in account if any.
444447
let dragPercentageStart = (this.touch.dragStartX - this.container.offsetLeft) / this.container.clientWidth
445-
let dragPercentageNow = (this.getCurrentMouseX(e) - this.container.offsetLeft) / this.container.clientWidth
448+
let dragPercentageNow = (this.touch.dragNowX - this.container.offsetLeft) / this.container.clientWidth
446449
let dragPercentage = ((dragPercentageStart < 0.5 ? 0 : 1) - dragPercentageNow) * 100
447450
let forwards = (dragAmount || dragPercentage) > 0
448451
@@ -469,6 +472,7 @@ export default {
469472
else this.cancelSlideChange()
470473
471474
this.touch.dragStartX = null
475+
this.touch.dragNowX = null
472476
this.touch.dragAmount = null
473477
// this.enableScroll()
474478
},
@@ -484,13 +488,6 @@ export default {
484488
return 'ontouchstart' in window ? e.touches[0].clientX : e.clientX
485489
},
486490
487-
/**
488-
* Return the x distance in pixel between drag start and current drag position.
489-
*/
490-
getDragAmount (e) {
491-
return ('ontouchstart' in window ? e.touches[0].clientX : e.clientX) - this.touch.dragStartX
492-
},
493-
494491
/**
495492
* The translation of most cases, in other cases this can still be used as a base calc.
496493
*/

0 commit comments

Comments
 (0)