zoukankan      html  css  js  c++  java
  • 原生JS实现轮播图

    采用原生js实现轮播图效果,具体代码如下
    HTML部分

       <div class="w">
            <div class="main">
                <div class="focus">
                    <a href="javascript:;" class="fl"> &lt</a>
                    <a href="javascript:;" class="fr"> &gt</a>
    
                    <ul>
                        <li>
                            <a href="javascript:;"><img src="./img/focus.jpg" alt=""></a>
                        </li>
                        <li>
                            <a href="javascript:;"><img src="./img/focus1.jpg" alt=""></a>
                        </li>
                        <li>
                            <a href="javascript:;"><img src="./img/focus2.jpg" alt=""></a>
                        </li>
                        <li>
                            <a href="javascript:;"><img src="./img/focus3.jpg" alt=""></a>
                        </li>
                    </ul>
                    <ol class="circle">
                    
                    </ol>
                </div>
            </div>
        </div>
    

    css部分

    *{
        margin: 0;
        padding: 0;
    }
    a{
        text-decoration: none;
        color: #ccc;
    }
    li{
        list-style: none;
        float: left;
    }
    .main{
        height: 455px;
         721px;
        position: absolute;
        left: 50%;
        top: 300px;
        transform: translate(-50%);
        overflow: hidden;
    }
    
    
    .fl,.fr{
        display: none;
         25px;
        height: 35px;
        line-height: 35px;
        text-align: center;
        background-color: rgba(0,0,0,.3);
        position: absolute;
        top: 50%;
        z-index: 99;
    }
    .fl{
        float: left;
        transform: translate(0,-50%);
    }
    .fr{
        float: right;
        right: 0;
        transform: translate(0,-50%);
    }
    .focus ul{
        position: absolute;
         700%;
    }
    
    .circle{
        position: absolute;
        bottom: 20px;
        left: 60%;
    }
    .current {
        background-color: #fff;
    }
    .circle li{ 
         8px;
        height: 8px;
        border: 2px solid rgba(255, 255, 255, 0.5);
        margin: 0 3px;
        border-radius: 50%;
        cursor: pointer;   
    }
    

    js部分

        // 动画函数
            function animate(obj,target,callback){
                clearInterval(obj.timer)
                obj.timer = setInterval(function(){
                    var step = (target - obj.offsetLeft) / 10
                    step = step > 0 ? Math.ceil(step) : Math.floor(step) 
                    if(obj.offsetLeft === target){
                        clearInterval(obj.timer)
                        callback && callback()
                    }
                    obj.style.left = obj.offsetLeft + step + 'px'
                },15)
            }
    
            window.addEventListener('load',function(){
                // 获取元素
                var fl = document.querySelector('.fl')
                var fr = document.querySelector('.fr')
                var focus = document.querySelector('.focus')
                // 获取宽度
                var focusWidth = focus.offsetWidth
                // 鼠标经过显示点击按钮
                focus.addEventListener('mouseenter',function(){
                    fl.style.display = 'block'
                    fr.style.display = 'block'
                    // 鼠标进过取消自动轮播
                    clearInterval(timer)
                    timer = null
                })
                // 鼠标离开失去
                focus.addEventListener('mouseleave',function(){
                    fl.style.display = 'none'
                    fr.style.display = 'none'
                    // 鼠标离开开启轮播
                    timer = setInterval(function(){
                        fr.click()
                    },2000)
                })
    
                //  根据图片数量生成对应的 导航按钮
                var ul = document.querySelector('ul')
                var ol = document.querySelector('ol')
                for(var i =0; i<ul.children.length;i++){
                    var li = document.createElement('li')
                    li.setAttribute('index',i)
                    ol.appendChild(li)
                    // 导航按钮添加点击事件
                    li.addEventListener('click',function(){
                        for(var i=0;i<ol.children.length;i++){
                            ol.children[i].className = ''
                        }
                        this.className = 'current'
                        var index = this.getAttribute('index')
                        num = index 
                        circle = index
                        animate(ul, -index*focusWidth)
                    })
                }
                // 设置第一个导航按钮样式
                ol.children[0].className = 'current'
                // 拷贝第一张图片插入到最后
                var first = ul.children[0].cloneNode(true)
                ul.appendChild(first)
                // 点击按钮,滚动图片
                var num = 0
                // 控制导航按钮播放
                var circle = 0
                // 节流阀
                var flag = true
                // 右侧点击按钮播放
                fr.addEventListener('click',function(){
                    if(flag){
                        flag = false
                        if(num===ul.children.length-1){
                            ul.style.left = 0
                            num = 0
                        }
                        num++
                        animate(ul, -num*focusWidth,function(){
                            flag = true
                        })
                        circle++
                        if(circle == ol.children.length){
                            circle = 0
                        }
                        circleChange()
                    }
                })
                // 左侧点击按钮播放
                fl.addEventListener('click',function(){
                    if(flag){
                        flag = false
                        if(num == 0){
                            num = ul.children.length - 1
                            ul.style.left = - num * focusWidth +'px'
                        }
                        num--
                        animate(ul,-num*focusWidth,function(){
                            flag = true
                        })
                        circle--
                        circle = circle <0 ? ol.children.length-1 :circle
                        circleChange()
                    }
                })
                // 控制导航按钮样式
                function circleChange(){
                    for(var i=0;i<ol.children.length;i++){
                        ol.children[i].className = ''
                    }
                    ol.children[circle].className = 'current'
                }
                // 开启定时器,自动播放
                var timer = setInterval(function(){
                    fr.click()
                },2000)
            })
    
  • 相关阅读:
    高职院校对口单招信息一类《专业技能》模拟试题(程序设计题)
    巧妙入侵家庭内网环境
    冰点还原忘记密码如何修改配置或卸载
    Windows 如何完整备份驱动
    如何创建自解压格式的压缩包 [ 每周小技巧 12月27日 ]
    CVE-2018-15982漏洞复现
    《内网下的自我修养》--- 基于交换机的常见攻击方式
    SQL基本注入演示
    Weblogic wls-wsat组件反序列化漏洞(CVE-2017-10271)
    通过Jenkins进行提权的一个思路
  • 原文地址:https://www.cnblogs.com/ymzi/p/12617967.html
Copyright © 2011-2022 走看看