vue+swiper实现左右滑动的测试题功能


Posted in Javascript onOctober 30, 2020

最近在做一个测试题,前后可以切换题目,点击按钮选择答案,选择答案的同时改变按钮的背景色,如下图所示:

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)
},

测试结果:可喜可贺,slideNext()不再有肉眼可见的延迟了。

有的时候为了少写点代码,不知不觉牺牲了性能。这次实践,虽然原生JS使我增加了好几行代码,但是带来的性能提升也是非常明显的。经过这次优化,我觉得如果对Vue源码理解透彻的人,大概是能马上知道优化点。我虽然看过一遍源码,但还是理解不够深入。需要学习的还有很多呀~

到此这篇关于vue+swiper实现左右滑动的测试题功能的文章就介绍到这了,更多相关vue左右滑动内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
IE iframe的onload方法分析小结
Jan 07 Javascript
javascript 二维数组的实现与应用
Mar 16 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
May 17 Javascript
JavaScript分秒倒计时器实现方法
Feb 02 Javascript
angularJS 中$attrs方法使用指南
Feb 09 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
Nov 03 Javascript
认识Knockout及如何使用Knockout绑定上下文
Dec 25 Javascript
解析Vue2.0双向绑定实现原理
Feb 23 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
Feb 27 Javascript
深入理解ES6 Promise 扩展always方法
Sep 26 Javascript
JS使用贪心算法解决找零问题示例
Nov 27 Javascript
Vue动画事件详解及过渡动画实例
Feb 09 Javascript
利用vue3+ts实现管理后台(增删改查)
Oct 30 #Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
Oct 30 #Javascript
解决vue侦听器watch,调用this时出现undefined的问题
Oct 30 #Javascript
vue2.0 watch里面的 deep和immediate用法说明
Oct 30 #Javascript
JavaScript实现轮播图效果
Oct 30 #Javascript
vue组件添加事件@click.native操作
Oct 30 #Javascript
解决removeEventListener 无法清除监听的问题
Oct 30 #Javascript
You might like
怎样在php中使用PDF文档功能
2006/10/09 PHP
php 传值赋值与引用赋值的区别
2010/12/29 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
JavaScript日历实现代码
2010/09/12 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
javascript跨域请求包装函数与用法示例
2016/11/03 Javascript
JS回调函数深入理解
2019/10/16 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
详解Python中for循环的使用
2015/04/14 Python
使用Python的PEAK来适配协议的教程
2015/04/14 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
django ORM之values和annotate使用详解
2020/05/19 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
社区活动邀请函范文
2014/01/29 职场文书
机关节能减排实施方案
2014/03/17 职场文书
班主任评语大全
2014/04/26 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
中药学专业求职信
2014/05/31 职场文书
交通安全学习心得体会
2016/01/18 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书