您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關使用vue+swiper實現一個左右滑動的測試題功能,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
我用了vue和swiper。所有的題目是一個對象數組,通過v-for渲染:
<swiper ref="mySwiper" :options="swiperOptions"> <swiper-slide v-for="(item, index) in listData" :key="index"> <div class="question-box"> <div class="idx">- 第{{ index+1 }}題 -</div> <div class="question">{{ item.question }}</div> </div> <button @click="goNext(index, 'a')" :class="item.answer=='a' ? 'active': ''">是</button> <button @click="goNext(index, 'b')" :class="item.answer=='b' ? 'active': ''">否</button> </swiper-slide> </swiper>
一開始我把每道題目的answer存放在對象里面,點擊的按鈕時候切換answer的值,button的動態class監聽到值改變后會引發背景色的改變。js部分:
goNext(index, answer) { this.$set(this.listData[index], 'answer', answer) this.swiper.slideNext(100) },
發現問題
測試發現這樣把點擊事件和動態樣式互相依賴,會造成大概幾百毫秒的延遲才執行slideNext(),是可以直觀感受到的延遲。通過調試,發現造成延遲有兩方面的原因:
this.$set
更改數組執行完點擊事件
到 動態class監聽到數據的改變
中間也有延遲。于是我換了一個思路,不把每個題目的answer放在對像數組里面,而是在data里面定義一個answerMap,這樣解決了問題1。為了解決問題2,我選擇把動態樣式 :class
去掉,改成用原生js在點擊事件里面直接修改class。這樣兩步下來,確實看不到延遲了。
優化后的代碼
html部分
<button @click="goNext($event, index, 'a')">是</button> <button @click="goNext($event, index, 'b')">否</button>
js部分
goNext(e, index, answer) { const element = e.target const bro = element.parentNode.children for (let i = 0; i < bro.length; i++) { if (bro[i] !== element) { bro[i].classList.remove("active") } } element.classList.add('active') this.answerMap[this.listData[index].question] = answer this.swiper.slideNext(100) },
以上就是使用vue+swiper實現一個左右滑動的測試題功能,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。