輪播圖練習

cssjavascript

       *{margin: 0;padding: 0;}
        /* 顯示區域 */
        #slideImg{margin: 50px auto;position: relative;border: 1px solid #333;height: 350px;width: 300px;}
            /* 大圖區域的左右按鈕 */
            #slideImg #left{position: absolute;height: 250px;width: 150px;left: 0;}
            #slideImg #leftBtn{position: absolute;height: 40px;width: 40px;left: 0;top: 50%;margin-top: -60px;background: rgba(22, 22, 22, .5);opacity: 0;}
            
            #slideImg #right{position: absolute;height: 250px;width: 150px;right: 0;}
            #slideImg #rightBtn{position: absolute;height: 40px;width: 40px;margin-top: -60px;right: 0;top: 50%;background: rgba(22, 22, 22, .5);opacity: 0;}
            /* 大圖 */
            #slideImg #bigImg{height: 250px;width: 300px;}
                #slideImg #bigImg img{display: block;width: 300px; height: 250px;}
            /* 底部小圖 */
            #slideImg #smallImg{height: 100px;width: 300px;position: relative;overflow: hidden;}
                #slideImg #smallImg #ul{position: absolute;width: 800px;left: -100px;}
                    #slideImg #smallImg #ul img{display: block;height: 100px;width: 100px;padding: 5px;box-sizing: border-box;float: left;cursor: pointer;opacity: .5;}

htmlcss

    <div id="slideImg">
        <div id="left"></div>
        <div id="right"></div>
        <div id="leftBtn"></div>
        <div id="rightBtn"></div>
        <div id="bigImg">
            <img src="" alt="">
        </div>
        <div id="smallImg">
            <div id="ul">
                <img class="img" src="../img/1.jpg" alt="">
                <img class="img" src="../img/2.jpg" alt="">
                <img class="img" src="../img/3.jpg" alt="">
                <img class="img" src="../img/4.jpg" alt="">
            </div>
        </div>
    </div>

javascripthtml

    function $(el){
        return document.getElementById(el);
    }
    var slideImg = $('slideImg');
    var bigImg = $('bigImg');
    var leftBtn = $('leftBtn');
    var rightBtn = $('rightBtn');
    var left = $('left');
    var right = $('right');
    var smallImg = $('smallImg');
    var autoTimer;
    var ul = $('ul');//小圖的容器,用來移動全部的小圖的left來實現滑動效果。
    var sImg = document.getElementsByClassName('img');//獲取全部小圖的對象的對象集
    var bImg = bigImg.firstElementChild;//獲取大圖的對象。
    var curImg = 2;//當前顯示圖片的下標,由於前面添加了兩張圖片,最後面添加了兩張圖片,因此本來第一張圖片的下標就變成了2.
    window.onload = function(){
        //建立圖像,調用函數
        img();
        smallImgClick();
        autoSlide();//自動輪播
        slideImgMouseOver();
        slideImgMouseOut();
        //設置大圖的默認圖像和默認小圖像的透明性爲1.
        bImg.src = '../img' + sImg[curImg].src.slice(sImg[curImg].src.lastIndexOf('/'));
        sImg[curImg].style.opacity = 1;
    }
    
    //自動輪播
    function autoSlide(){
        autoTimer = setInterval(function(){
            curImg++;
            slideTo();
        },4000)
    }
    //當鼠標進入輪播圖的時候,中止自動播放,移出的時候,進行自動播放。
    function slideImgMouseOver(){
        addEvent(slideImg,'mouseover',function(){
            clearInterval(autoTimer);
        })
    }
    function slideImgMouseOut(){
        addEvent(slideImg,'mouseout',function(){
            autoSlide();//自動輪播
        })
    }
    //點擊圖像滑動圖片,
    function smallImgClick(){
        for(var i = 0;i < sImg.length; i++){
            sImg[i].index = i;
            addEvent(sImg[i],'click',function(){
                curImg = this.index;
                slideTo(); }) } }
    //圖像滑動核心函數
    function slideTo(){ if(curImg == 1){
            curImg = 6;
            ul.style.left = -curImg * 100 + 100 + 'px';
            curImg--;
        }
        if(curImg == 6){
            curImg = 1;
            ul.style.left = -curImg * 100 + 100 + 'px';
            curImg++;
        }
        bImg.src = '../img' + sImg[curImg].src.slice(sImg[curImg].src.lastIndexOf('/'));
        var elPro = {'left':-curImg * 100 + 100} animateEl(ul,elPro);
        //遍歷全部的小圖片,讓他們的透明性爲.5,當前下標圖片透明性爲1
        for(var i = 0; i < sImg.length; i++){ animateEl(sImg[i],{'opacity':.5}); } animateEl(sImg[curImg],{'opacity':1}); }
    //建立全部圖像,並將圖像添加到ul元素中,
    function img(){ var firstImg = document.querySelector('#smallImg img:first-of-type');
        var firstImgClone = firstImg.cloneNode();
        var secondImg = document.querySelector('#smallImg img:nth-of-type(2)');
        var secondImgClone = secondImg.cloneNode();
        var lastImg = document.querySelector('#smallImg img:last-of-type');
        var lastImgClone = lastImg.cloneNode();
        var thirdImg = document.querySelector('#smallImg img:nth-of-type(3)');
        var thirdImgClone = thirdImg.cloneNode();
        ul.appendChild(firstImgClone);
        ul.appendChild(secondImgClone);
        ul.insertBefore(lastImgClone,firstImg);
        var topImg = document.querySelector('#smallImg img:first-of-type'); ul.insertBefore(thirdImgClone,topImg); }
    //鼠標點擊按鈕滑動圖片。
    addEvent(leftBtn,'click',function(){ curImg--; slideTo(); }) addEvent(rightBtn,'click',function(){ curImg++; slideTo(); })
    
    //鼠標進入大圖的左區域左按鈕出現,右區域,右按鈕出現。
    left.onmouseover = leftBtn.onmouseover = function(){
        animateEl(leftBtn,{'opacity':1});
    }
    left.onmouseout = leftBtn.onmouseout = function(){
        animateEl(leftBtn,{'opacity':0});
    }
    right.onmouseover = rightBtn.onmouseover = function(){
        animateEl(rightBtn,{'opacity':1});
    }
    right.onmouseout = rightBtn.onmouseout = function(){
        animateEl(rightBtn,{'opacity':0}); }  
    //兼容ie6,7,8的事件處理
    function addEvent(obj,evt,fun){ if(obj.addEventListener){ obj.addEventListener(evt,fun); }else{ obj.attachEvent("on"+evt,fun); } }
    //封裝特效核心函數
    function getStyle(el,property){//ie8兼容性
        return el.currentStyle ? el.currentStyle[property] :window.getComputedStyle(el)[property]; } function animateEl(el,properties,fn){ clearInterval(el.timer); el.timer = setInterval(function() {//設定週期調用函數
           var stop = true;//設置是否獲得的屬性都匹配了設定的值,則返回true for(var property in properties){//遍歷對象中的鍵名
                var curpro; var target = properties[property];
                if(property == "opacity"){
                    curpro = Math.round(parseFloat(getStyle(el,property)) * 100);//將值乘以100取整,方便計算speed
                    target = parseFloat(target)*100;
                }else{
                    curpro = parseFloat(getStyle(el,property));//width若是使用parseInt,不會獲得指定值,其餘能夠
                }
                var speed = (target - curpro) / 30;//目標距離減去當前距離除以30做爲速度。
                speed = speed > 0 ? Math.ceil(speed): Math.floor(speed);//若是速度大於0,則向上取整,至少爲1,相反爲-1;
                if(properties[property] != curpro){//若是這個值沒有達到指定值,則設定stop爲false,不讓定時器中止。
                    stop = false;
                }
                if(property == "opacity"){
                    el.style[property] =(curpro + speed)/100 ;
                }else{
                    el.style[property] =curpro + speed + "px";
                }
            }
            if(stop){//若是一個值匹配了指定值,則中止定時器
                clearInterval(el.timer);
                fn && fn();//由於中止了第一個定時器,須要開啓下一次運算,用回調函數來決定。這個意思是你返回一個函數,則調用這個函數。
            }
        }, 20);
    }
相關文章
相關標籤/搜索