From 8e7930033ba006f7c8ad5cf20fac973e7dd8591d Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 6 Mar 2018 16:56:01 +0800 Subject: [PATCH] [new feature] Swipe: support disable loop (#670) --- docs/markdown/en-US/swipe.md | 1 + docs/markdown/zh-CN/swipe.md | 1 + packages/swipe/index.vue | 18 +++++++++++++++--- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/markdown/en-US/swipe.md b/docs/markdown/en-US/swipe.md index a4444023f..5c1965515 100644 --- a/docs/markdown/en-US/swipe.md +++ b/docs/markdown/en-US/swipe.md @@ -72,6 +72,7 @@ export default { |-----------|-----------|-----------|-------------|-------------| | autoplay | Autoplay interval (ms) | `Number` | - | - | | duration | Animation duration (ms) | `Number` | `500` | - | +| loop | Whether to enable loop | `Boolean` | `true` | - | | show-indicators | Whether to show indocators | `Boolean` | `true` | - | | initial-swipe | Index of initial swipe, start from 0 | `Number` | `0` | - | diff --git a/docs/markdown/zh-CN/swipe.md b/docs/markdown/zh-CN/swipe.md index 1e8c331f8..5b0085e75 100644 --- a/docs/markdown/zh-CN/swipe.md +++ b/docs/markdown/zh-CN/swipe.md @@ -72,6 +72,7 @@ export default { |-----------|-----------|-----------|-------------|-------------| | autoplay | 自动轮播间隔,单位为 ms | `Number` | - | - | | duration | 动画时长,单位为 ms | `Number` | `500` | - | +| loop | 是否开启循环播放 | `Boolean` | `true` | - | | show-indicators | 是否显示指示器 | `Boolean` | `true` | - | | initial-swipe | 初始位置,从 0 开始算 | `Number` | `0` | - | diff --git a/packages/swipe/index.vue b/packages/swipe/index.vue index 4fc53c6d1..777ec1950 100644 --- a/packages/swipe/index.vue +++ b/packages/swipe/index.vue @@ -29,6 +29,10 @@ export default create({ props: { autoplay: Number, + loop: { + type: Boolean, + default: true + }, initialSwipe: { type: Number, default: 0 @@ -152,6 +156,14 @@ export default create({ move(move = 0, offset = 0) { const { active, count, swipes, deltaX, width } = this; + if ( + !this.loop && + ((active === 0 && (offset > 0 || move < 0)) || + (active === count - 1 && (offset < 0 || move > 0))) + ) { + return; + } + if (move) { if (active === -1) { swipes[count - 1].offset = 0; @@ -190,9 +202,9 @@ export default create({ }, getDirection(touch) { - const distanceX = Math.abs(touch.clientX - this.startX); - const distanceY = Math.abs(touch.clientY - this.startY); - return distanceX > distanceY ? 'horizontal' : distanceX < distanceY ? 'vertical' : ''; + const offsetX = Math.abs(touch.clientX - this.startX); + const offsetY = Math.abs(touch.clientY - this.startY); + return offsetX > offsetY ? 'horizontal' : offsetX < offsetY ? 'vertical' : ''; }, range(num, arr) {