最近在做一个测试题,前后可以切换题目,点击按钮选择答案,选择答案的同时改变按钮的背景色,如下图所示:
初始代码
我用了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(),是可以直观感受到的延迟。通过调试,发现造成延迟有两方面的原因:
于是我换了一个思路,不把每个题目的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) },
测试结果:可喜可贺,slideNext()不再有肉眼可见的延迟了。
有的时候为了少写点代码,不知不觉牺牲了性能。这次实践,虽然原生JS使我增加了好几行代码,但是带来的性能提升也是非常明显的。经过这次优化,我觉得如果对Vue源码理解透彻的人,大概是能马上知道优化点。我虽然看过一遍源码,但还是理解不够深入。需要学习的还有很多呀~
到此这篇关于vue+swiper实现左右滑动的测试题功能的文章就介绍到这了,更多相关vue左右滑动内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍Android ViewPager撤消左右滑动切换功能实现代码,包括了Android ViewPager撤消左右滑动切换功能实现代码的使用技巧和注意事项,需要的朋友参考一下 最近做项目要求某种情况下ViewPager不能滑动,那么我们只需要重写这个方法就可以禁止ViewPager滑动。下面通过本文给大家ViewPager取消左右滑动切换功能的实例代码,具体代码如下所示: IndexV
本文向大家介绍vue移动端的左右滑动事件详解,包括了vue移动端的左右滑动事件详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了vue移动端左右滑动事件,供大家参考,具体内容如下 关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。 更多vue学习教程请阅读专题《vue实战教程》 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍flutter PageView实现左右滑动切换视图,包括了flutter PageView实现左右滑动切换视图的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了flutter PageView左右滑动切换视图的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Android使用ViewPager实现左右无限滑动,包括了Android使用ViewPager实现左右无限滑动的使用技巧和注意事项,需要的朋友参考一下 前言 网上有很多使用ViewPager实现左右滑动这一效果的资料,这些资料大多数都是将PagerAdapter中getCount()方法的返回值设为Integer.MAX_VALUE使用户看不到边界,然后在insta
本文向大家介绍Android ViewPager实现左右滑动翻页效果,包括了Android ViewPager实现左右滑动翻页效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了ViewPager实现左右滑动翻页效果展示的具体代码,供大家参考,具体内容如下 代码如下: 布局文件: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
问题内容: 我所看到的和jQuery的。左右滑动的功能/方式如何? 问题答案: 您可以使用jQueryUI中的其他效果来执行此操作: 快速示例: