2017/3/8 无缝轮播心得(完整版)

<!DOCTYPE html><html lang="en"><head>   <meta charset="UTF-8">   <title>Document</title>   <link rel="stylesheet" href="css/elementinit.css">   <style>      .wrap{         position:relative;         width:600px;         height:500px;         margin:20px auto;         overflow:hidden;      }      .photo{         position:absolute;         left:-600px;         width:9999px;         height:500px;      }      .photo img{         float:left;         width:600px;         height:500px;      }      .prev,.next{         width:38px;         height:78px;         position:absolute;         top:225px;      }      .prev{         background:url(img/indexNew-bg.png) 0 -51px no-repeat;      }      .next{         right:0;         background:url(img/indexNew-bg.png) -43px -51px no-repeat;      }      .btns{         position:absolute;         bottom:30px;         right:90px;      }      .btns li{         width:10px;         height:10px;         border:2px solid deepskyblue;         background:transparent;         border-radius:50%;         margin:10px;         float:left;      }   </style></head><body>   <div class="wrap">      <div class="photo">         <img src="img/4.jpg" >         <img src="img/1.jpg" >         <img src="img/2.jpg" >         <img src="img/3.jpg" >         <img src="img/4.jpg" >         <img src="img/1.jpg" >      </div>      <div class="prev"></div>      <div class="next"></div>      <ul class="btns">         <li></li>         <li></li>         <li></li>         <li></li>      </ul>   </div></body><script>      var photo = document.querySelector(‘.photo‘);      var prev = document.querySelector(‘.prev‘);      var next = document.querySelector(‘.next‘);      var btns = document.querySelectorAll(‘.btns li‘);      var index = 1 ;//图片的下标从1开始.而不是从零开始.`      var  timer = null;      var bol  = true;      btns[0].style.background = ‘orange‘;      next.onclick = function(){         clearInterval(timer);         //如果 bol 是false 返回(return)执行程序,否则就让 bol = false;         //总体的意思就是:当点击两下的时候让 bol = false; 阻止连续执行两下.()         //相当于是开关,如果是关闭的状态,就返回重新执行代码,否则的话,就让开关关闭(也就是bol=false),关闭的话就阻止了连续点击行为.         if(bol==false){            return;         }else{            bol = false;         }       //方便起见,这个邮件的代码和左键的一个效果只不过是下面那段简化而已.         index ++;         //这个 if 判断的代码要注意.图的轮播是4张图片,而布局确是6张,让 left = 0;让下标等于1,这就实现了无缝轮播(中间切换用函数,16毫秒进行切换)         if(index >4){            photo.style.left = ‘0px‘;            index = 1;//第一个图的下标是1,但是第一个图的left值是600.

}         for(var j = 0 ; j < btns.length; j ++){            btns[j].style.background = ‘transparent‘;         }           btns[index-1].style.background = ‘orange‘;//这里的[index-1]是同步num和index的.也就是在点击左键时候.btn切换能同步.         animate();//图片切换时候的函数.         autoPlay();//自动轮播      }      prev.onclick = function(){         clearInterval(timer);         if(!bol){            return;         }         bol = false;         index --;           //这个判断方式与图片的布局也有关系,如果布局不是这样就答案不到轮播的效果.         if(index < 1){            index = 4;            photo.style.left = ‘-3000px‘;            //这个-3000显示的是第六张(最后一张)图片,而不是所谓的img/4.jpg这张,         }         //通过循环遍历四个按钮.         for(var j = 0 ; j < btns.length; j ++){               btns[j].style.background = ‘transparent‘;            }            console.log(index)         btns[index-1].style.background = ‘orange‘;         animate();         autoPlay();          }      //下面的四个按钮      //底层点击的小按钮,外层循环添加下标,      for(var i = 0 ; i < btns.length; i ++){         btns[i].num = i;//这里的num相当于index          btns[i].onclick = function(){            clearInterval(timer);            if(!bol){               return;            }            bol = false;            for(var j = 0 ; j < btns.length; j ++){               btns[j].style.background = ‘transparent‘;            }            this.style.background = ‘orange‘;            index = this.num +1;            animate();            autoPlay();         }      }      // console.log(btns)      function animate(){                var start = photo.offsetLeft;          //console.log(start);         //起始位置,每次photo.offsetLeft;都不一样,轮播一个图片就变一次.         var end = index * -600; //结束位置         var change = end - start;//改变量         var startstep = 0;//开始步数         var endstep = 38;            //结束步数   //这个参数可以调节图片滑动的速度         var timer = setInterval(function(){            startstep ++;            if(startstep >=endstep){               clearInterval(timer);               bol = true;//这里的 bol = true 也会是打开开关!必须加,否则就左右点击按钮不能进行下一次点击.            }            //注意下边的操作要放到定时器里边            photo.style.left = start + change /endstep *startstep +  ‘px‘; //       100  =  改变  +   不变  / 不变   *  改变               //       100  =  100  +   600  / 50     *   0                //       112  =  100  +   600  / 50     *   1                //       124  =  100  +   600  / 50     *   2                //       136  =  100  +   600  / 50     *   3                //       148  =  100  +   600  / 50     *   4                //       160  =  100  +   600  / 50     *   5           //   change /endstep *startstep 从左到右一次运算.           // 该变量/总步数 * 改变步数 =  (每步改变的量) * 改变的步数 = 该变量         },16);      //定时器的作用就是,16毫秒内完成50步的该变量.      }      function autoPlay(){          timer = setInterval(function(){            index ++;            if(index >4){               index = 1;               photo.style.left = ‘0px‘;            }            for(var j = 0 ; j < btns.length; j ++){               btns[j].style.background = ‘transparent‘;            }

btns[index-1].style.background = ‘orange‘;            animate();            //自动轮,调用animate();实现切换页面;         },2000)      }        autoPlay();       //console.log(timer)</script></html>
时间: 2024-11-02 09:18:17

2017/3/8 无缝轮播心得(完整版)的相关文章

jQuery插件版无缝轮播,重写了之前的代码,显得更高大上一点

轮播图之前也写了好几个,但是对于怎么实现无缝轮播还是有着不小的困惑,趁着周末了解了一下实现原理之后,重写了之前发布的案例(再看那个案例写的代码,真心心塞啊,不过只要努力学习,天天进步就好).好了,下面就来说下如何实现无缝轮播. 百度了很多,各种各样的说法,但说的都不太明白,最后还是看了视频解决的. 我实现的这种思路是这样的:1.假设你是用无序列表实现的哈,里面的每个li 包含着你的一个图片,首先呢,你得克隆一份第一张图片,并将其追加到你的ul 里面.2.通过改变ul 的left 值,你实现了一张

js动画 无缝轮播 进度条 文字页面展示 div弹窗遮罩效果

1.无缝轮播 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="ser

记一个jquery 无缝轮播的制作方法

接触前端也很久了,今天才发现,要做好一个轮播,其实有很多东西需要考虑进去,否则做出来的轮播效果并不好,下面我就来做一个轮播,是依赖jquery来写的 1.要做轮播,首先需要的是HTML的内容,css的机构样式,以下为html代码: 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="utf-8" /> 6 <link rel="stylesheet" hr

JS 无缝轮播图1-节点操作

无缝轮播图 (使用节点操作) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> *{ padding:0; margin:0; } body{ background:#F5F5F5; } #content{ width:300px; height:200px;

jQuery制作无缝轮播效果

[一]HTML结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jquery制作无缝轮播器</title> <script type="text/javascript" src="jquery-1.12.4.js"></script> &

分别用css3、JS实现图片简单的无缝轮播功效

本文主要介绍分别使用CSS3.JS实现图片简单无缝轮播功效: 一.使用CSS3实现:利用animation属性 (实现一张一张的轮播,肉眼只看见一张图片) HTML部分比较简单,两个div下包着几个img标签:为了实现无缝轮播,注意第一张图片要与最后一张图片相同: <div class="out"> <div class="imgs"> <img src="img/beatuy.jpg"/> <img s

左右无缝轮播图的实现

无缝轮播图: <title>无缝轮播图</title> <style> *{margin: 0;padding:0; } ul{list-style: none;} .banner{width: 600px;height: 300px;border: 2px solid #ccc;margin: 100px auto;position: relative;overflow: hidden;} .img{position: absolute;top: 0;left: 0}

jq实现无缝轮播

2016-10-14 jq实现无缝轮播 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <me

动态添加的无缝轮播

一般的前段都会写百叶窗的无缝轮播,但那种一般局限于静态页面,就是在html后面添加多一屏的图片.但这种遇到程序员后台添加的时候就产生问题,所以我们不能在html页面中直接添加第一屏的图了,那就在jq中获取html中第一屏的内容再添加到最后