Skip to content

Commit 652161f

Browse files
committed
avoid drag img
1 parent 49f8f23 commit 652161f

2 files changed

Lines changed: 37 additions & 8 deletions

File tree

js/src/carousel.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ const Event = {
6464
POINTERUP : `pointerup${EVENT_KEY}`,
6565
POINTERLEAVE : `pointerleave${EVENT_KEY}`,
6666
POINTERCANCEL : `pointercancel${EVENT_KEY}`,
67+
DRAG_START : `dragstart${EVENT_KEY}`,
6768
LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,
6869
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`
6970
}
@@ -84,6 +85,7 @@ const Selector = {
8485
ACTIVE : '.active',
8586
ACTIVE_ITEM : '.active.carousel-item',
8687
ITEM : '.carousel-item',
88+
ITEM_IMG : '.carousel-item img',
8789
NEXT_PREV : '.carousel-item-next, .carousel-item-prev',
8890
INDICATORS : '.carousel-indicators',
8991
DATA_SLIDE : '[data-slide], [data-slide-to]',
@@ -323,6 +325,7 @@ class Carousel {
323325
}
324326
}
325327

328+
$(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, (e) => e.preventDefault())
326329
if (this._pointerEvent) {
327330
$(this._element).on(Event.POINTERDOWN, (event) => start(event))
328331
$(this._element).on(Event.POINTERUP, (event) => end(event))

js/tests/unit/carousel.js

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,15 @@ $(function () {
44
window.Carousel = typeof bootstrap !== 'undefined' ? bootstrap.Carousel : Carousel
55

66
var originWinPointerEvent = window.PointerEvent
7-
var originMsPointerEvent = window.MSPointerEvent
7+
window.MSPointerEvent = null
88
var supportPointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)
99

1010
function clearPointerEvents() {
1111
window.PointerEvent = null
12-
window.MSPointerEvent = null
1312
}
1413

1514
function restorePointerEvents() {
1615
window.PointerEvent = originWinPointerEvent
17-
window.MSPointerEvent = originMsPointerEvent
1816
}
1917

2018
var stylesCarousel = [
@@ -1032,11 +1030,15 @@ $(function () {
10321030
return
10331031
}
10341032

1033+
var sandbox = sinon.createSandbox()
1034+
if ('maxTouchPoints' in navigator) {
1035+
sandbox.stub(navigator, 'maxTouchPoints').value(1)
1036+
}
1037+
10351038
Simulator.setType('pointer')
10361039
assert.expect(3)
10371040
var $styles = $(stylesCarousel).appendTo('head')
10381041
var done = assert.async()
1039-
document.documentElement.ontouchstart = $.noop
10401042

10411043
var carouselHTML =
10421044
'<div class="carousel" data-interval="false">' +
@@ -1050,8 +1052,7 @@ $(function () {
10501052
' </div>' +
10511053
'</div>'
10521054

1053-
var $carousel = $(carouselHTML)
1054-
$carousel.appendTo('#qunit-fixture')
1055+
var $carousel = $(carouselHTML).appendTo('#qunit-fixture')
10551056
var $item = $('#item')
10561057
$carousel.bootstrapCarousel()
10571058
var carousel = $carousel.data('bs.carousel')
@@ -1061,8 +1062,8 @@ $(function () {
10611062
assert.ok(true, 'slid event fired')
10621063
assert.ok($item.hasClass('active'))
10631064
assert.ok(spy.called)
1064-
delete document.documentElement.ontouchstart
10651065
$styles.remove()
1066+
sandbox.restore()
10661067
done()
10671068
})
10681069

@@ -1075,6 +1076,12 @@ $(function () {
10751076
QUnit.test('should allow swiperight and call prev with touch events', function (assert) {
10761077
Simulator.setType('touch')
10771078
clearPointerEvents()
1079+
1080+
var sandbox = sinon.createSandbox()
1081+
if ('maxTouchPoints' in navigator) {
1082+
sandbox.stub(navigator, 'maxTouchPoints').value(1)
1083+
}
1084+
10781085
assert.expect(3)
10791086
var done = assert.async()
10801087
document.documentElement.ontouchstart = $.noop
@@ -1104,6 +1111,7 @@ $(function () {
11041111
assert.ok(spy.called)
11051112
delete document.documentElement.ontouchstart
11061113
restorePointerEvents()
1114+
sandbox.restore()
11071115
done()
11081116
})
11091117

@@ -1119,12 +1127,16 @@ $(function () {
11191127
return
11201128
}
11211129

1130+
var sandbox = sinon.createSandbox()
1131+
if ('maxTouchPoints' in navigator) {
1132+
sandbox.stub(navigator, 'maxTouchPoints').value(1)
1133+
}
1134+
11221135
assert.expect(3)
11231136
Simulator.setType('pointer')
11241137

11251138
var $styles = $(stylesCarousel).appendTo('head')
11261139
var done = assert.async()
1127-
document.documentElement.ontouchstart = $.noop
11281140

11291141
var carouselHTML =
11301142
'<div class="carousel" data-interval="false">' +
@@ -1150,6 +1162,7 @@ $(function () {
11501162
assert.ok(!$item.hasClass('active'))
11511163
assert.ok(spy.called)
11521164
$styles.remove()
1165+
sandbox.restore()
11531166
done()
11541167
})
11551168

@@ -1165,6 +1178,11 @@ $(function () {
11651178
clearPointerEvents()
11661179
Simulator.setType('touch')
11671180

1181+
var sandbox = sinon.createSandbox()
1182+
if ('maxTouchPoints' in navigator) {
1183+
sandbox.stub(navigator, 'maxTouchPoints').value(1)
1184+
}
1185+
11681186
var done = assert.async()
11691187
document.documentElement.ontouchstart = $.noop
11701188

@@ -1192,6 +1210,7 @@ $(function () {
11921210
assert.ok(!$item.hasClass('active'))
11931211
assert.ok(spy.called)
11941212
restorePointerEvents()
1213+
sandbox.restore()
11951214
done()
11961215
})
11971216

@@ -1205,6 +1224,12 @@ $(function () {
12051224
QUnit.test('should not allow pinch with touch events', function (assert) {
12061225
assert.expect(0)
12071226
clearPointerEvents()
1227+
1228+
var sandbox = sinon.createSandbox()
1229+
if ('maxTouchPoints' in navigator) {
1230+
sandbox.stub(navigator, 'maxTouchPoints').value(1)
1231+
}
1232+
12081233
Simulator.setType('touch')
12091234
var done = assert.async()
12101235
document.documentElement.ontouchstart = $.noop
@@ -1221,6 +1246,7 @@ $(function () {
12211246
touches: 2
12221247
}, function () {
12231248
restorePointerEvents()
1249+
sandbox.restore()
12241250
done()
12251251
})
12261252
})

0 commit comments

Comments
 (0)