JS仿京东移动端手指拨动切换轮播图效果

如今,移动端web页面在市场上也是占有相当大的比例,而移动端的轮播图效果也是很常见的,今天我就来记录下关于实现一组适用于移动端的可用手指进行拨动切换轮播图的效果。
这个效果的主要技术点依托于触屏设备特有的touch事件;好了,接下来就进入主题吧。

首先是html布局

1. 这里强调的是记得给html加上viewport这个适口属性。
2. 由于在拨动第一张图片以及最后一张图片的时候需要切换到最后一张以及第一张,要想达到理想效果,需要给第一张图片前面加上最后一张图片,而在最后一张图片后加上第一张图片。
3. f_l代表的是左浮动

**html代码如下:**

    <ul class='banner_imgs clearfix'>
     <li class='f_l'>
      <a href="#"><img src="image/l8.jpg" alt="" /></a>
     </li>
     <li class='f_l'>
      <a href="#"><img src="image/l1.jpg" alt="" /></a>
     </li>
     <li class='f_l'>
      <a href="#"><img src="image/l2.jpg" alt="" /></a>
     </li>
     <li class='f_l'>
      <a href="#"><img src="image/l3.jpg" alt="" /></a>
     </li>
     <li class='f_l'>
      <a href="#"><img src="image/l4.jpg" alt="" /></a>
     </li>
     <li class='f_l'>
      <a href="#"><img src="image/l5.jpg" alt="" /></a>
     </li>
     <li class='f_l'>
      <a href="#"><img src="image/l6.jpg" alt="" /></a>
     </li>
     <li class='f_l'>
      <a href="#"><img src="image/l7.jpg" alt="" /></a>
     </li>
     <li class='f_l'>
      <a href="#"><img src="image/l8.jpg" alt="" /></a>
     </li>
     <li class='f_l'>
      <a href="#"><img src="image/l1.jpg" alt="" /></a>
     </li>
    </ul>
    <!-- 轮播图的 索引 -->
    <ul class="banner_index clearfix">
     <li class="current"></li>
     <li></li>
     <li></li>
     <li></li>
     <li></li>
     <li></li>
     <li></li>
     <li></li>
    </ul>

接下来是css样式

注意,此处并没有加上常规的reset样式代码

.jd_banner .banner_imgs {
 /* 10倍屏幕宽度 */
 width: 1000%;
}
.jd_banner .banner_imgs li {
 /* 一倍的屏幕宽度 */
 width: 10%;
}
.jd_banner .banner_imgs li a {
 display: block;
 width: 100%;
}
.jd_banner .banner_imgs li a img {
 display: block;
 width: 100%;
}
.jd_banner .banner_index {
 position: absolute;
 bottom: 15px;
 left: 50%;
 margin-left: -64px;
}
.jd_banner .banner_index li {
 float: left;
 width: 6px;
 height: 6px;
 border: 1px solid white;
 border-radius: 50%;
 margin: 0 5px;
}
.jd_banner .banner_index li.current {
 background-color: #fff;
}

最后是最最重要的js代码

1. transitionend 过渡结束后触发的效果,在这儿主要是保证图片切换到最后一张我们手动增加的图片完成的瞬间,切换回到真正的第一张图片处;
2. touch事件的三要素: touchstart--手指按上时,touchmove--手指移动时,touchend--手指松开屏幕时;
3. event.touches[0].clientX获取按下一个手指时的位置,可以打印出event查看其包含有哪些属性方法;

window.onload = function() {
 slide();
}

function slide() {
 var bannerImgs = document.querySelector(".banner_imgs");
 var Indexs = document.querySelectorAll(".banner_index li");
 var imgLis = document.querySelectorAll(".banner_imgs li");

 //屏幕宽度
 var screenWidth = document.body.offsetWidth;
 var index = 1;

 //默认显示的应该是第二张图片
 bannerImgs.style.transform = "translateX(" + screenWidth * index * -1 + "px)";

 //添加过渡效果
 function setTransition() {
  bannerImgs.style.webkitTransition = "all .2s";
  bannerImgs.style.transition = "all .2s";
 }

 //清除过渡效果
 function clearTransition() {
  bannerImgs.style.webkitTransition = "none";
  bannerImgs.style.transition = "none";
 }

 //设置移动距离
 function setTranslateX(distance) {
  bannerImgs.style.webkitTransform = "translateX(" + distance + "px)";
  bannerImgs.style.transform = "translateX(" + distance + "px)";
 }

 //控制小圆点
 function setPoint() {
  for (var i = 0; i < Indexs.length; i++) {
   Indexs[i].className = "";
  }
  Indexs[index - 1].className = "current";
 }

 //设置定时器
 var timer = setInterval(function() {
  index++;
  setTransition();
  setTranslateX(screenWidth * index * -1);
 }, 1000);

 //添加过渡动画结束事件
 bannerImgs.addEventListener("transitionend", function() {
  if (index > 8) {
   index = 1;
  } else if (index < 1) {
   index = 8;
  }
  clearTransition();
  setTranslateX(screenWidth * index * -1);
  setPoint();
 })

 //添加touch事件
 var startX = 0;
 var moveX = 0;
 var isMove = false;

 bannerImgs.addEventListener("touchstart", function(event) {
  isMove = false;
  clearInterval(timer);
  startX = event.touches[0].clientX;
 })

 bannerImgs.addEventListener("touchmove", function(event) {
  isMove = true;
  moveX = event.touches[0].clientX - startX;
  setTranslateX(moveX + index * screenWidth * -1);
 })

 bannerImgs.addEventListener("touchend", function(event) {
  if(isMove && Math.abs(moveX) > screenWidth/3){
   if (moveX < 0) {
    index++;
   } else if (moveX > 0) {
    index--;
   }
  }
  setTransition();
  setTranslateX(index * screenWidth * -1);
  timer = setInterval(function() {
   index++;
   setTransition();
   setTranslateX(screenWidth * index * -1);
  }, 1000);
 })
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JavaScript实现移动端轮播效果

    这个轮播代码不是我自己所写,是偶然游览一个简友的主页看到的,今天刚看了事件,决定来逐行分析一下这个代码.首先,移动端与电脑端不同的是移动端只能通过触摸和手势来发生行为,所以我们要用到js中的与触摸操作有关的新事件.其实我们轮播的原理和以前相同,都是通过改变元素的位置来控制图片的出现,但让我们不是很上手的,是那些用于跟踪触摸的属性. 下面,我简单介绍一下与触摸相关的知识 触摸事件 touchstart:当手指触摸屏幕时触发,一只手指放在屏幕上也会触发 touchmove:当手指在屏幕上滑动时连续触

  • 原生JS实现移动端web轮播图详解(结合Tween算法造轮子)

    前言 相信大家应该都知道,移动端的轮播图是我们比较常见的需求, 我们最快的实现方式往往是 使用第三方的代码, 例如 swiper , 但当遇到一些比较复杂的轮播图需求时, 往往是束手无策,不知道怎么改. 所以我们要尝试去自己造一些轮子, 以适应各种复杂多变的需求;  另外一点, 自己写的代码如果有bug是很容易修复的, 对自身的提高也很大. 在没有阅读swiper源码的过程下,我尝试自己实现一个简易而不失实用的移动端轮播图, 经过几个小时的思考和实践终于还是实现了(如图): 实现移动端的轮播图要

  • 原生js实现移动开发轮播图、相册滑动特效

    使用方法: 分别引用css文件和js文件 如: <link rel="stylesheet" type="text/css" href="css/photoSlider.min.css" /> <script src="js/photoSlider.min.js" type="text/javascript" charset="utf-8"></script

  • Javascript实现视频轮播在pc端与移动端均可

    最近客户要求用Javascript实现视频轮播: 有兴趣的同学可以参开一下 下面写了一个程序实现视频轮播,pc端与移动端均可以实现, 但移动端,存在有一点bug; 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <met

  • flexslider.js实现移动端轮播

    效果如下: 代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> <title>flexslider.js移动端轮播</title> <meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0" name="

  • 支持移动端原生js轮播图

    直接上代码,自行复制粘贴,本人是新手,欢迎指正. <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>轮播图</title> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-sca

  • js实现移动端轮播图效果

    本文实例为大家分享了移动端轮播图效果展示的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, max

  • 利用纯js + transition动画实现移动端web轮播图详解

    前言 在上一篇文章中,我们使用 tween算法实现了 ease-out移动效果, 其实更简洁的方法是使用 css3的 transition动画,下面话不多说了,来一起看看详细的介绍吧. 核心点: 在 我们通过代码来移动一段距离的时候, 使用 transion动画;在手指移动的时候,不使用transition动画. 使用 transition实现的动画效果的轮播图js代码不足100行 ~function () { var lastPX = 0; // 上一次触摸的位置x坐标, 需要计算出手指每次移

  • JS仿京东移动端手指拨动切换轮播图效果

    如今,移动端web页面在市场上也是占有相当大的比例,而移动端的轮播图效果也是很常见的,今天我就来记录下关于实现一组适用于移动端的可用手指进行拨动切换轮播图的效果. 这个效果的主要技术点依托于触屏设备特有的touch事件:好了,接下来就进入主题吧. 首先是html布局: 1. 这里强调的是记得给html加上viewport这个适口属性. 2. 由于在拨动第一张图片以及最后一张图片的时候需要切换到最后一张以及第一张,要想达到理想效果,需要给第一张图片前面加上最后一张图片,而在最后一张图片后加上第一张

  • 基于JS实现仿百度百家主页的轮播图效果

    HTML <div class="ShowEntry"> <!-- <div id="widget_content_player" class="Player" alog-group="log-player">--> <!--------- 右击箭头---------> <a href="javascript:void(0);" rel="ex

  • Android仿京东淘宝自动无限循环轮播控件思路详解

    在App的开发中,很多的时候都需要实现类似京东淘宝一样的自动无限轮播的广告栏,所以就自己写了一个,下面是我自定义控件的思路和过程. 一.自定义控件属性 新建自定义控件SliderLayout继承于RelativeLayout,首先要考虑的就是自定义的控件需要扩展那些属性,把这些属性列出来.在这里是要实现类似于京东淘宝的无限轮播广告栏,那么首先想到的就是轮播的时长.轮播指示器的样式等等.我在这里列举了一些并且结合到了代码中. 1.扩展属性 (1)是否开启自动轮播的功能. (2)指示器的图形样式,一

  • 原生JS实现pc端轮播图效果

    本文实例为大家分享了JS实现pc端轮播图效果的具体代码,供大家参考,具体内容如下 案例:轮播图需求 布局:ul下有很多li标签:浮动在一行: 原理:切换图片的时候,把ul位置修改一下,给ul的父容器,设置一个 overflow:hidden: 功能需求: 序号轮播 左右按钮的轮播 自动轮播 鼠标在轮播图里面的时候,停止自动轮播,离开后继续自动轮播 实现效果: html部分 <div class="box" id="box"> <div class=

  • vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)

    1.效果图如下 2.vue代码如下 <el-carousel type="card" arrow="always" :loop="false" :initial-index="1" indicator-position="none" :autoplay="false"> <el-carousel-item v-for="(items, index) in it

  • javascript实现点击按钮切换轮播图功能

    本文实例为大家分享了js实现点击按钮切换轮播图的具体代码,供大家参考,具体内容如下 菜单区域实现 划过主菜单显示子菜单 轮播区域实现 1.点击图片中左右箭头,分别跳转上一张与下一张 (1)点击上一张图其实就是让一个变量进行递减,点击下一张图就是让变量递增:(控制索引最大最小值) 2.点击右下角小圆也可以进行图片的跳转 (1)通过索引让变量进行随意的修改 3.每间隔3s进行轮播图的自动切换,鼠标放在图片上清除自动切换 (1)定时器 4.鼠标放在主菜单上显示子菜单,离开子菜单消失. 放在子菜单上显示

  • JS中Swiper的使用和轮播图效果

    Swiper是移动端的一款非常强大的触摸滑动插件,下面代码只展示一些常用的配置,具体可以查看官网api <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="swiper.min.cs

  • 使用html+js+css 实现页面轮播图效果(实例讲解)

    html 页面 <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=

  • 简单实现js轮播图效果

    本文实例为大家分享了js实现轮播图效果展示的具体代码,供大家参考,具体内容如下 html结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin:0; padding:0; font-size:14px; -webkit-use

随机推荐