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 相关文章推荐
用Javascript数组处理多个字符串的连接问题
Aug 20 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
Nov 22 Javascript
js左右弹性滚动对联广告代码分享
Feb 19 Javascript
js使用循环清空某个div中的input标签值
Sep 29 Javascript
jquery中filter方法用法实例分析
Feb 06 Javascript
JS实现生成会变大变小的圆环实例
Aug 05 Javascript
AngularJS 使用 UI Router 实现表单向导
Jan 29 Javascript
node实现的爬虫功能示例
May 04 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
Jul 06 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
Aug 08 Javascript
vue-cli项目修改文件热重载失效的解决方法
Sep 19 Javascript
jQuery pager.js 插件动态分页功能实例分析
Aug 02 jQuery
利用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利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
js实现简单贪吃蛇游戏
2020/05/15 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
vue 动态生成拓扑图的示例
2021/01/03 Vue.js
Python IDLE入门简介
2017/12/08 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
python编写简单端口扫描器
2019/09/04 Python
python如何建立全零数组
2020/07/19 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
英国折扣高尔夫商店:Discount Golf Store
2019/11/19 全球购物
最新销售员个人自荐信
2013/09/21 职场文书
房屋买卖协议书范本
2014/04/10 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
golang中的并发和并行
2021/05/08 Golang
深入详解JS函数的柯里化
2021/06/09 Javascript
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript
使用Python解决图表与画布的间距问题
2022/04/11 Python
Python简易开发之制作计算器
2022/04/28 Python