Skip to content

Commit 0485917

Browse files
ZXHHHH123jacob-zchrichard1015
authored
Jacob (#380)
* feat: nutui-swiper组件添加newCurrentPage参数设置swiper页 * feat: swiper组件新增props接收字段newCurrentPage参数,通过该参数可指定swiper滑动到指定页 Co-authored-by: Jacob <[email protected]> Co-authored-by: richard1015 <[email protected]>
1 parent a6887d9 commit 0485917

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

src/packages/swiper/demo.vue

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,16 @@
2222
:loop="true"
2323
:canDragging="false"
2424
:paginationVisible="true"
25+
:newCurrentPage="newCurrentPage"
2526
>
2627
<div v-for="(item, index) in dataImgItem" :key="index" class="nut-swiper-slide ">
2728
<img :src="item.imgSrc" style="max-width:100%;" />
2829
</div>
2930
</nut-swiper>
3031

32+
<div @click="add">下翻页</div>
33+
<div @click="sub">上翻页</div>
34+
3135
<h4>纵向自动播放</h4>
3236
<nut-swiper direction="vertical" :autoPlay="3000" :swiperData="dataImgItem">
3337
<div v-for="(item, index) in dataImgItem" :key="index" class="nut-swiper-slide ">
@@ -57,7 +61,8 @@ export default {
5761
data() {
5862
return {
5963
dataItem: [],
60-
dataImgItem: []
64+
dataImgItem: [],
65+
newCurrentPage: 1
6166
};
6267
},
6368
mounted() {
@@ -102,6 +107,12 @@ export default {
102107
},
103108
slideChangeStart(page) {
104109
console.log(page);
110+
},
111+
add() {
112+
this.newCurrentPage = this.newCurrentPage + 2;
113+
},
114+
sub() {
115+
this.newCurrentPage = this.newCurrentPage - 1;
105116
}
106117
}
107118
};

src/packages/swiper/swiper.vue

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ export default {
6464
type: Number,
6565
default: 1
6666
},
67+
newCurrentPage: {
68+
type: Number,
69+
default: 1
70+
},
6771
lazyLoad: {
6872
type: Boolean,
6973
default: false
@@ -82,12 +86,22 @@ export default {
8286
watch: {
8387
swiperData(newValue, oldValue) {
8488
this.updateEvent();
89+
},
90+
newCurrentPage(newPage) {
91+
let modTempNum = newPage % this.slideEls.length;
92+
newPage = modTempNum == 0 ? this.slideEls.length : modTempNum < 0 ? this.slideEls.length + modTempNum : modTempNum;
93+
94+
if (newPage >= this.currentPage) {
95+
this.next(newPage - this.currentPage);
96+
} else {
97+
this.prev(this.currentPage - newPage);
98+
}
8599
}
86100
},
87101
data() {
88102
return {
89103
dragging: false,
90-
currentPage: this.initPage,
104+
currentPage: this.initPage || this.newCurrentPage,
91105
lastPage: 1,
92106
translateX: 0,
93107
translateY: 0,
@@ -108,28 +122,28 @@ export default {
108122
},
109123
methods: {
110124
//下一张
111-
next() {
125+
next(turnPageCount = 1) {
112126
let page = this.currentPage;
113-
if (page < this.slideEls.length || this.isLoop) {
114-
this.setPage(page + 1, true, 'NEXT');
127+
if (page + turnPageCount < this.slideEls.length || this.isLoop) {
128+
this.setPage(page + turnPageCount, true, 'NEXT');
115129
} else {
116130
this._revert();
117131
}
118132
},
119133
//上一张
120-
prev() {
134+
prev(turnPageCount = 1) {
121135
let page = this.currentPage;
122-
if (page > 1 || this.isLoop) {
123-
this.setPage(page - 1, true, 'PREV');
136+
if (page - turnPageCount > 1 || this.isLoop) {
137+
this.setPage(page - turnPageCount, true, 'PREV');
124138
} else {
125139
this._revert();
126140
}
127141
},
128142
setPage(page, isHasAnimation, type) {
129143
if (page === 0) {
130144
this.currentPage = this.slideEls.length;
131-
} else if (page === this.slideEls.length + 1) {
132-
this.currentPage = 1;
145+
} else if (page > this.slideEls.length) {
146+
this.currentPage = page - this.slideEls.length;
133147
} else {
134148
this.currentPage = page;
135149
}

0 commit comments

Comments
 (0)