• 网易轮播图


    html代码:

     1 <body>
     2 <div class="w-slider" id="js_slider">
     3     <div class="slider">
     4         <div class="slider-main" id="slider_main_block">
     5             <div class="slider-main-img"><a href="#"><img src="images/1.jpg" alt=""/></a></div>
     6             <div class="slider-main-img"><a href="#"><img src="images/2.jpg" alt=""/></a></div>
     7             <div class="slider-main-img"><a href="#"><img src="images/3.jpg" alt=""/></a></div>
     8             <div class="slider-main-img"><a href="#"><img src="images/4.jpg" alt=""/></a></div>
     9             <div class="slider-main-img"><a href="#"><img src="images/5.jpg" alt=""/></a></div>
    10             <div class="slider-main-img"><a href="#"><img src="images/6.jpg" alt=""/></a></div>
    11         </div>
    12     </div>
    13     <div class="slider-ctrl" id="slider_ctrl">
    14         <span class="slider-ctrl-prev"></span>
    15         <span class="slider-ctrl-next"></span>
    16     </div>
    17 </div>
    18 </body>

    js代码:

      1 window.onload = function() {
      2     // 获取元素
      3     function $(id) {return document.getElementById(id);}
      4     var js_slider = $("js_slider");  // 获取最大盒子
      5     var slider_main_block = $("slider_main_block");  // 滚动图片的父亲
      6     var imgs = slider_main_block.children;  // 获得所有的图片组 需要滚动的部分
      7     var slider_ctrl = $("slider_ctrl");  // 获得 控制span 的 父盒子
      8     // 操作元素
      9     // 生成小span
     10     for(var i=0;i<imgs.length; i++) {
     11 
     12         var span = document.createElement("span");// 创建 span
     13         span.className = "slider-ctrl-con"; // 添加类名
     14         span.innerHTML = imgs.length-i;  //  6 - 0     6 - 1   // 实现 倒序 的方式插入
     15         slider_ctrl.insertBefore(span,slider_ctrl.children[1]);  // 再 父亲 倒数第二个盒子的前面插入
     16     }
     17     // 下面的第一个小span  是默认的蓝色
     18     var spans = slider_ctrl.children;   // 得到所有的 span
     19     spans[1].setAttribute("class","slider-ctrl-con current");  // 两个类名
     20 
     21     var scrollWidth = js_slider.clientWidth; // 得到大盒子的宽度 也就是  后面动画走的距离  310
     22     //  刚开始,按道理   第一张图片 留下   其余的人走到 310 的位置上
     23     for(var i = 1; i<imgs.length; i++) { // 从1 开始 因为第一张不需要计算
     24 
     25         imgs[i].style.left =  scrollWidth + "px";  // 其他人 先右移动到 310 的位置
     26     }
     27     // 遍历三个按钮
     28      // spans 是 8个按钮 他们都是 span
     29     var iNow = 0; //  用来 控制播放张数
     30     for(var k in spans){   //   k  是索引号  spans[k]    spans[0]  第一个span
     31         spans[k].onclick = function() {
     32             // alert(this.innerHTML);
     33             if(this.className == "slider-ctrl-prev"){ // 判断当前点击的这个按钮是不是 prev
     34                 // alert("您点击了左侧按钮");
     35                 //  当我们左侧点击时候, 当前的这张图片 先慢慢的走到右边  上一张 一定先快速走到左侧 (-310)的位置,然后慢慢的走到舞台中
     36                 animate(imgs[iNow],{left: scrollWidth});
     37                 --iNow < 0 ?  iNow = imgs.length - 1 : iNow;
     38                 imgs[iNow].style.left = -scrollWidth + "px";
     39                 animate(imgs[iNow],{left: 0});
     40                 setSquare();
     41             }
     42             else if(this.className == "slider-ctrl-next") {  // 右侧按钮开始
     43                 autoplay();
     44             }
     45             else {
     46                 // alert("您点击了下面的span");
     47                 // 我们首先要知道我们点击是第几张图片  --- 获得当前的索引号
     48                 // alert(this.innerHTML);
     49                 var that = this.innerHTML - 1;
     50                 // console.log(typeof that);
     51                 if(that > iNow) {
     52                       // 做法等同于 右侧按钮
     53                     animate(imgs[iNow],{left: -scrollWidth});  // 当前的这张慢慢的走出去 左侧
     54                     imgs[that].style.left = scrollWidth + "px"; // 点击的那个索引号 快速走到右侧  310
     55                 }
     56                 else if(that < iNow) {
     57                     // 做法等同于 左侧按钮
     58                     animate(imgs[iNow],{left: scrollWidth});
     59                     imgs[that].style.left = -scrollWidth + "px";
     60                 }
     61                 iNow = that;  // 给当前的索引号
     62                 animate(imgs[iNow],{left: 0});
     63                 /*比如 已经播放到 第4张    我点击了 第2张   把 2 给  inow
     64                 下一次播放,应该播放第3张*/
     65                // animate(imgs[iNow],{left: 0});
     66                 setSquare();
     67             }
     68         }
     69     }
     70     //  一个可以控制 播放span 的 函数   当前
     71     function setSquare() {
     72        //  清除所有的span current   留下 满足需要的拿一个
     73         for(var i=1;i<spans.length-1;i++){   //  8个span   我们要 1-6  不要 7  索引号
     74             spans[i].className = "slider-ctrl-con";
     75         }
     76         spans[iNow+1].className = "slider-ctrl-con current";  // 记住 + 1
     77     }
     78     // 定时器开始  其实, 定时器就是  右侧按钮
     79     var timer = null;
     80     timer = setInterval(autoplay,2000);  // 开启定时器
     81     function autoplay() {
     82         //  当我们点击时候, 当前的这张图片 先慢慢的走到左边  下一张 一定先快速走到右侧 (310)的位置,然后慢慢的走到舞台中
     83         // alert("您点击了右侧按钮");
     84         //iNow == 0
     85         animate(imgs[iNow],{left: -scrollWidth});
     86         // 当前的那个图片 慢慢的走到 -scrollWidth 位置
     87         // 变成1   先 ++   ++iNow  先自加  后 运算
     88         ++iNow > imgs.length -1 ?  iNow = 0 : iNow;
     89         imgs[iNow].style.left = scrollWidth + "px";  // 立马执行  快速走到右侧
     90         animate(imgs[iNow],{left: 0}); // 下一张走的 0 的位置  慢慢走过来
     91         setSquare();  // 调用square
     92     }
     93     //鼠标经过清除定时器
     94     js_slider.onmouseover = function() {
     95         clearInterval(timer);
     96     }
     97     js_slider.onmouseout = function() {
     98         clearInterval(timer);  // 要执行定时器 先清除定时器
     99         timer = setInterval(autoplay,2000);  // 开启定时器
    100     }
    101 }

    动画代码:

     4 // 多个属性运动框架  添加回调函数
     5 function animate(obj,json,fn) {  // 给谁    json
     6     clearInterval(obj.timer);
     7     obj.timer = setInterval(function() {
     8         var flag = true;  // 用来判断是否停止定时器   一定写到遍历的外面
     9         for(var attr in json){   // attr  属性     json[attr]  值
    10             //开始遍历 json
    11             // 计算步长    用 target 位置 减去当前的位置  除以 10
    12             // console.log(attr);
    13             var current = 0;
    14             if(attr == "opacity")
    15             {
    16                 current = Math.round(parseInt(getStyle(obj,attr)*100)) || 0;
    17                 console.log(current);
    18             }
    19             else
    20             {
    21                 current = parseInt(getStyle(obj,attr)); // 数值
    22             }
    23             // console.log(current);
    24             // 目标位置就是  属性值
    25             var step = ( json[attr] - current) / 10;  // 步长  用目标位置 - 现在的位置 / 10
    26             step = step > 0 ? Math.ceil(step) : Math.floor(step);
    27             //判断透明度
    28             if(attr == "opacity")  // 判断用户有没有输入 opacity
    29             {
    30                 if("opacity" in obj.style)  // 判断 我们浏览器是否支持opacity
    31                 {
    32                     // obj.style.opacity
    33                     obj.style.opacity = (current + step) /100;
    34                 }
    35                 else
    36                 {  // obj.style.filter = alpha(opacity = 30)
    37                     obj.style.filter = "alpha(opacity = "+(current + step)* 10+")";
    38 
    39                 }
    40             }
    41             else if(attr == "zIndex")
    42             {
    43                 obj.style.zIndex = json[attr];
    44             }
    45             else
    46             {
    47                 obj.style[attr] = current  + step + "px" ;
    48             }
    49 
    50             if(current != json[attr])  // 只要其中一个不满足条件 就不应该停止定时器  这句一定遍历里面
    51             {
    52                 flag =  false;
    53             }
    54         }
    55         if(flag)  // 用于判断定时器的条件
    56         {
    57             clearInterval(obj.timer);
    58             //alert("ok了");
    59             if(fn)   // 很简单   当定时器停止了。 动画就结束了  如果有回调,就应该执行回调
    60             {
    61                 fn(); // 函数名 +  ()  调用函数  执行函数
    62             }
    63         }
    64     },10)
    65 }
    66 function getStyle(obj,attr) {  //  谁的      那个属性
    67     if(obj.currentStyle)  // ie 等
    68     {
    69         return obj.currentStyle[attr];  // 返回传递过来的某个属性
    70     }
    71     else
    72     {
    73         return window.getComputedStyle(obj,null)[attr];  // w3c 浏览器
    74     }
    75 }

    css代码:

     1 * {margin:0;padding:0; }
     2 img {
     3     vertical-align: top;
     4 }
     5 .w-slider {
     6      310px;
     7     height: 265px;
     8     margin:100px auto;
     9     position: relative;
    10     overflow: hidden;
    11 }
    12 .slider {
    13      310px;
    14     height: 220px;
    15 
    16 }
    17 .slider-main {
    18      620px;
    19     height: 220px;
    20 }
    21 .slider-main-img {
    22     position: absolute;
    23     top: 0;
    24     left: 0;
    25      310px;
    26     height: 220px;
    27 }
    28 .slider-main-img img {
    29      100%;
    30 }
    31 .slider-ctrl {
    32     text-align: center;
    33     padding-top: 5px;
    34 }
    35 .slider-ctrl-con {
    36      24px;
    37     height: 20px;
    38     display:inline-block;
    39     background:url(../images/icon.png) no-repeat -24px -782px;
    40     margin: 0 5px;
    41     cursor: pointer;
    42     text-indent: -20em;
    43     overflow: hidden;
    44 }
    45 .current {
    46     background-position: -24px -762px;
    47 }
    48 .slider-ctrl-prev,
    49 .slider-ctrl-next {
    50     position: absolute;
    51     top: 50%;
    52     margin-top: -35px;
    53     background:url(../images/icon.png) no-repeat 6px top;
    54      30px;
    55     height: 35px;
    56     opacity: 0.8;
    57     cursor: pointer;
    58 }
    59 .slider-ctrl-prev {
    60     left: 0;
    61 }
    62 .slider-ctrl-next {
    63     right: 0;
    64     background-position: -6px -44px;
    65 }
  • 相关阅读:
    vant下拉加载更多,上拉刷新
    记住滚动条位置
    Python笔试题:给定一个非负整数num,反复将各个位上的数字相加,直到结果为一位数【杭州多测师】【杭州多测师_王sir】
    Python笔试题:小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。【杭州多测师】【杭州多测师_王sir】
    Pycharm:显示每一行代码的修改记录
    vue: 在页面中单独引入elmentui
    pandas: 设置列名&获取所有列名
    Pandas: 将dataframe转换为dict
    Node: 将时间戳转换成日期并分组
    扩充小学数学3年级整数除法运算的计算法则
  • 原文地址:https://www.cnblogs.com/yangguoe/p/8133763.html
Copyright © 2020-2023  润新知