js滑动轮播图,vue页面轮播

  js滑动轮播图,vue页面轮播

  本文主要介绍vue.js项目中使用原生js的移动终端轮播地图。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。

  

目录

  前言1。了解原生js移动终端2的事件。轮播图实战第一部分:模板template的解读第一部分:脚本标签中代码的解读第二部分:css样式的解读第三部分。渲染的结论

  

前言

  今天在vue.js项目的实际开发过程中,遇到了实现轮播效果的问题。因为我不想因为一个轮播就引用整个jquery,而且我也发现我根本不了解移动端的一些事件,所以我做了一些资料搜索,终于解决了这个问题。接下来,我想和大家分享一下我解决问题的过程。

  

一、了解原生js移动端的事件

  原生js mobile上有四种事件:

  动作触摸开始手指放在屏幕上触发触摸移动手指在屏幕上移动触发(高频触发)触摸结束手指离开屏幕触发触摸取消系统取消触摸事件。每个事件被触发后,都会返回一个事件参数,其中包含三个触摸列表,分别是:

  事件中的触摸列表内容触摸屏幕上的所有手指列表目标触摸当前DOM中的手指列表更改触摸是指当前事件的手指列表(尝试在本例中使用)。触摸列表中的每一个触摸对象(也就是每一根手指)都对应着触摸时产生的一些信息(只写了一部分)。

  触摸信息含义clientX/clientY触摸点相对于浏览器的位置pageX/pageY触摸点相对于屏幕的位置页面摘要X/screenY触摸点相对于屏幕的位置:我们可以使用参数event.changedTouches[0]。获取触发触摸事件的手指(changedTouches[0])相对于页面(pageX

  

二、轮播图实战

  我们只使用carousel函数中的前三个触发事件。我们来看看具体的应用。

  因为vue.js项目都是以组件的形式开发的,所以我在这里以一个组件的形式展示。有问题可以留言问。

  

第一部分:template模板

  模板

  div class= continue play _ box @ touch start= touch start @ touch move= touch move @ touch end= touch end

  div class=items_box

  标题中的div v-for=(item,index :key= index

  a:href= item . link rel= external no follow

  img :src=item.image alt=

  /a

  /div

  /div

  div class=points_box

  div class=points

  长度:key= index :class= { current:index==current img } /div

  /div

  /div

  /div

  /模板

  

第一部分解读:

  1.class= continue play _ box 的div标签作为组件模板中的根标签来包装内部标签(知识点:如果一个组件中有多个标签在同一级别,则必须用一个标签包装),同时也用于设置overflow:hidden样式来隐藏未播放的转盘。

  2.具有class= items _ box 的div标记是具有内部class= slide 的div标记的父标记,该标记用于打开flex布局。这个标签的主要内容是轮播图片。

  3.带有class="slide "的div标签用v-for指令遍历父组件传入的数据横幅并输出它。

  4.带有class= points 的div标记是带有internal class=each_point 的div标记的父标记,它用于打开flex布局,以便圆盘传送带底部和中间的点有序排列。这个标签的主要内容是转盘底部和中间的进度条上的点。

  

第二部分:script标签内代码

  脚本

  导出默认值{

  名称:“继续播放”,

  Props:[banners],//接受来自父组件的横幅数据

  data(){

  返回{

  Bannerwidth: 0,//轮播宽度

  StartPoint: 0,//触摸起点的横坐标

  端点:0,//触摸终点的横坐标。

  Movelength: 0,//起点和终点之差

  当前值:0,//当前轮播图的索引

  isPlaying: true,//判断是否处于自动轮播

  playTimer: null //轮播定时器

  }

  },

  方法:{

  触摸开始(事件){

  //停止轮播

  clearInterval(this.playTimer)

  //获取触摸的开始点

  这个起点=事件。已更改触摸[0].pageX

  },

  触摸移动(事件){

  //获取触摸的结束点

  这个端点=事件。已更改触摸[0].pageX

  this.slidings()

  },

  TouchEnd(){

  这个。跳转()

  //开始轮播

  this.startPlay()

  },

  //Jump()方法用于处理滑动到一定程度后松手自动跳转到下一页或上一页

  Jump(){

  const current img=文档。getelementsbyclassname( slide )

  //滑动超过轮播图宽度的百分之40,则跳转下一张,否则不跳转

  如果(这个MoveLength 0 this .CurrentImg!==this.banners.length-1){

  如果(这个MoveLength this。横幅宽度* 0.4){

  这个。当前

  当前img[0]。风格。左边距=-this .CurrentImg * this.bannerwidth px

  }

  否则{

  当前img[0]。风格。左边距=-this .CurrentImg * this.bannerwidth px

  }

  }

  else if(这个MoveLength 0 this .CurrentImg!==0){

  如果(-这个MoveLength this。横幅宽度* 0.4){

  这个。当前

  当前img[0]。风格。左边距=-this .CurrentImg * this.bannerwidth px

  }

  否则{

  当前img[0]。风格。左边距=-this .CurrentImg * this.bannerwidth px

  }

  }

  },

  //slidings()方法用于处理在滑动过程中,轮播图跟着手指滑动的距离移动

  slidings(){

  //判断是点击还是滑动

  如果(这个100 . start point===这个。端点){return}

  这个MoveLength=this .起点-这个。端点

  //操作多姆,获取轮播图对象标签

  const current img=文档。getelementsbyclassname( slide )

  //获取轮播图的宽度

  this.bannerwidth=currentimg[0].偏移距离

  //判断是否超出滑动范围,即第一页无法再往前一页滑动,最后一页无法再往后一页滑动

  如果(这个MoveLength 0 this .CurrentImg!==this.banners.length-1){

  当前img[0]。风格。左边距=-this .移动长度-这个CurrentImg * this.bannerwidth px

  }

  else if(这个MoveLength 0 this .CurrentImg!==0){

  当前img[0]。风格。左边距=-this .移动长度-这个CurrentImg * this.bannerwidth px

  }

  },

  //开启轮播

  startPlay() {

  clearInterval(this.playTimer)

  这个。play timer=setInterval(()={

  如果(这个CurrentImg===3) {

  这个当前mg=-1

  }

  这个。当前

  const current img=文档。getelementsbyclassname( slide )

  this.bannerwidth=currentimg[0].偏移距离

  当前img[0]。风格。左边距=-this .CurrentImg * this.bannerwidth px

  当前img[0]。风格。transition=全1s ease

  }, 3000)

  }

  },

  已安装(){

  //页面挂在完毕自动开启轮播

  this.startPlay()

  }

  }

  /脚本

  

第二部分解读:

  1.在组件数据属性中,初始化了几个变量:起点(触摸开始点横坐标)、端点(触摸结束时横坐标)、移动长度(移动的长度(有正负))、当前值(当前轮播图索引)

  2.在页面挂在完成后,触发方法中的开始播放方法,开启轮播功能

  3.在触摸事件中主要运用起点-终点的值使得图片跟着手指的滑动方向同步移动,并且在触摸开始时,关闭自动轮播定时器,在触摸结束后,自动开启轮播定时器

  4.在松手后,通过跳转()方法进行跳转上下页图片

  

第三部分:css样式部分

  样式范围。继续播放_框{

  溢出:隐藏;

  位置:相对;

  }。继续播放_框。items_box{

  显示器:flex

  }。继续播放_框。幻灯片{

  伸缩:0;

  宽度:100%;

  }。继续播放_框。幻灯片img,继续播放_框。幻灯片a{

  宽度:100%;

  身高:100%;

  }。points_box{

  显示器:flex

  justify-content:居中;

  }。积分{

  显示器:flex

  宽度:33%;

  高度:10px

  位置:绝对;

  底部:8px

  对齐-内容:空间-均匀;

  }。分。每个点{

  宽度:8px

  高度:8px

  边框半径:8px

  背景:# fff

  不透明度:0.7;

  }。分。当前{

  背景:# ff0031

  }

  /风格

  css样式我就不多解释了,因为比较抽象。你可以按照我的代码调试优化,我的应该不是最好的。

  

三、效果图

  这张gif图展示了我现在开发的一些项目效果图,包括本文提到的轮播功能。

  

结束语

  020.05.01这是我在vue.js实战项目开发第二天遇到的问题希望遇到的问题能帮到你。有兴趣可以关注一波,每天和大家分享一些问题和解决方法。你也可以和我分享你的经历。

  更多关于原生js移动轮播的信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: