• 轮播图:原生JS+CSS3


    轮播图基本上是前端所必须面临的一个功能。而且在网上可以找到各种各样的插件或者写法。

    但是我个人觉得还是写一下比较好。这里用到的是原生JS、CSS3相结合的写法。

    对IE 8以下的兼容性不是太好。但相对于浏览器使用情况来说,还是可以的。

    下边是css样式:

    body{margin: 0;padding: 0;}
    img{border: none;vertical-align: middle;}
    .banner{ 500px;height: 181px;overflow: hidden;margin: 100px auto 0;}
    .banner-conent a{display: block;text-decoration: none;float: left;}
    .banner-conent img{ 500px;height: 181px;}
    <div class="banner">
        <div class="banner-conent">
            <a href="#">
                <img src="../image/livehouse@3x.png">
            </a>
            <a href="#">
                <img src="../image/livehouse@3x.png"> 
            </a>
            <a href="#">
                <img src="../image/livehouse@3x.png">
            </a>
        </div>
    </div>

    通过transitoinEnd事件对象来实现图片的切换。

    var itcast={
        /*transitoinEnd:事件对象,在 CSS 完成过渡后触发。*/
        transitoinEnd:function(dom,fn){
             if(dom && typeof dom ==='object'){                  
    dom.addEventListener("webkitTransitionEnd",function(){ fn && fn(); }); dom.addEventListener("transitionEnd", function() { fn && fn(); } ) } } }

    获取元素以及相关变量的声明:

    var banner = document.querySelector(".banner");/*获取最外层元素*/
        var imageBox=banner.querySelector(".banner-conent");/*获取父级元素*/
        imageBox.style.width= 3*100+"%"; /*通过子级元素算出父级元素的宽度*/
        var w=banner.offsetWidth;
        var index=0;
        var img_length = 3;
        /*添加过滤效果*/
        var addTransition=function(){
                imageBox.style.transition="all 0.5s";
                imageBox.style.webkitTransition="all 0.5s";
            };
        /*移除效果*/        
        var removeTransition=function(){
                imageBox.style.transition="none";
                imageBox.style.webkitTransition="none";
            }
        /*设置偏移量*/
        var addTranslate=function(w){
                imageBox.style.transform="translateX("+w+"px)";
                imageBox.style.webkitTransform="translateX("+w+"px)";
            }

     开启定时器:

    /*通过定时器来控制轮播速度*/
        var timer=setInterval(function(){
                addTransition();
                index++;
                addTranslate(-index*w);      
            },3000);

      itcast.transitoinEnd(imageBox,function(){
        if(index<0){
          index=img_length;
          removeTransition();
          addTranslate(-index * w);
        }
        else if(index>=(img_length)){
          index=0;
          removeTransition();
          addTranslate(-index * w);
        }
      });

    添加左右滑动事件

    var startX=0;
        var moveX=0;
        var distinceX=0;
        var isMove=false;
        /*左右滑动事件*/
        imageBox.addEventListener("touchstart",function(event){
            clearInterval(timer);
            startX=event.touches[0].clientX;        
        });
        imageBox.addEventListener("touchmove",function(event){
            isMove=true;
            moveX=event.touches[0].clientX;
            distinceX=moveX-startX;
            var current=(-index*w)+distinceX;
            removeTransition();
            addTranslate(current);
        })
        imageBox.addEventListener("touchend",function(){
            if(isMove && Math.abs(distinceX)>w/3){
                if(distinceX>0){
                    index--;
                }else{
                    index++;
                }
                addTransition();
                addTranslate(-index*w);
            }else{
                addTransition();
                addTranslate(-index*w);
            }
            timer=setInterval(function(){
                index++;
                addTransition();
                addTranslate(-index*w);
            },3000);
        })

    通过上述代码,你会发现当轮播到最后一张时,会出现一个短暂的空白(BUG),这个时候,只需要再最后多添加一次第一张图片,同时修改父级元素的宽度和img_length即可实现无缝完美轮播!

  • 相关阅读:
    .net core 经典面试题
    面试常问概念类问题
    常见 .net 面试题目
    Linux 最常用150个命令汇总
    .net core 国际化(web通用版)
    vim 命令合集
    解决Mariadb安装时的Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-qenllaxj/mysqlclient/报错
    正则表达式
    python中的JWT
    chapter2.3、react高阶组件,装饰器
  • 原文地址:https://www.cnblogs.com/WQLong/p/8298054.html
Copyright © 2020-2023  润新知