js無縫滾動實現及原理詳解

js無縫滾動實現及原理詳解javascript

【案例分析】css

①點擊左(右)按鈕一次,就讓圖片滾動一次html

②聲明一個變量i,java

   每點擊一次右側按鈕,自增1,讓這個變量*圖片的寬度,即爲ul移動的距離app

   每點擊一次左側按鈕,自減1,讓這個變量*圖片的寬度,即爲ul移動的距離ide

③圖片無縫滾動原理函數

將ul中第一張圖片所在的li複製一份,放到ul的最後面。須要強調移動是ul不是li,實現以下:動畫

a.,當圖片滾動到克隆的最後一張圖片時,此時再點擊右側按鈕,讓ul快速的、不作動畫的跳到最左側(第一張圖片處):left:0+'px';htm

 

 

 

b.同理,當圖片滾動到第一張圖片時,此時再點擊左側按鈕,讓ul快速的、不作動畫的跳到最右側(克隆的最後一張圖片處):對象

left: -img_width * (ul.children.length - 1)+'px';

 

 

 

 

c.同時,將變量i重置爲初始值0,這就能夠重新開始滾動圖片了

【應用知識點】

一、animate動畫函數,將animate動畫函數所在annimate.js文件引入

      注意:可見使用動畫函數的前提,該元素必須有定位,由於添加了定位的元素才能使用element.style.left

二、克隆節點。cloneNode()加true深克隆,複製裏面的子節點,false或省略爲淺克隆

三、添加節點appenChild()

四、element.offsetWidth返回自身包括padding、邊框、內容區的寬度,返回數值不帶單位。

      注意:offsetWidth爲只讀屬性,只能獲取不能賦值。

五、給elemt.style.left賦值時末尾註意+‘px’

html代碼:

 <!-- 引入動畫函數 -->
 <script src="animate.js"></script>
<body>
    <div class="banner">
        <ul>
            <li><img src="images/1.jpg" alt=""></li>
            <li><img src="images/2.jpg" alt=""></li>
            <li><img src="images/3.jpg" alt=""></li>
            <li><img src="images/4.jpg" alt=""></li>

        </ul>
        <!-- 右側按鈕 -->
        <div class="forward">
            <a href="javascript:;">》</a>
        </div>
        <!-- 左側按鈕 -->
        <div class="back">
            <a href="javascript:;">《</a>
        </div>
    </div>
</body>

css代碼:

<style>
    * {
        margin: 0;
        padding: 0;
    }
    
    a {
        text-decoration: none;
        color: #000000;
        font-size: 24px;
    }
    
    .banner {
        position: relative;
        width: 1024px;
        height: 688px;
        margin: 100px auto;
        overflow: hidden;
    }
    
    .banner ul {
        position: relative;
        width: 6000px;
        height: 688px;
        background-color: darkslategray;
    }
    
    li {
        float: left;
        width: 1024px;
        height: 688px;
        overflow: hidden;
        list-style: none;
        background-color: chocolate;
    }
    
    .forward {
        position: absolute;
        right: 0;
        top: 340px;
    }
    
    .back {
        position: absolute;
        left: 0;
        top: 340px;
    }
</style>

js代碼:

<script>
    //一、獲取元素對象
    var forward = document.querySelector('.forward');
    var back = document.querySelector('.back');
    var ul = document.querySelector('.banner').querySelector('ul');
    var firstli = ul.children[0];
    //二、把ul第一個li複製一份,放到ul的最後面
    var firstli_clone = firstli.cloneNode(true);
    ul.appendChild(firstli_clone)
    console.log(firstli);
    //三、聲明一個變量i
    var i = 0;
    //圖片的寬度(=包含圖片小li的寬度)
    var img_width = document.querySelector('.banner').querySelector('li').offsetWidth;
    //四、右側按鈕
    forward.addEventListener('click', function() {
        if (i == ul.children.length - 1) {
            ul.style.left = 0 + 'px';
            i = 0;
        }
        i++;
        // diaplacement表ul須要移動的距離
        var diaplacement = -img_width * i;
        animate(ul, diaplacement);
    });
    //五、左側按鈕
    back.addEventListener('click', function() {
        if (i == 0) {
            ul.style.left = -img_width * (ul.children.length - 1) + 'px';
            i = ul.children.length - 1;
        }
        i--;
        // diaplacement表ul須要移動的距離
        var diaplacement = -img_width * i;
        animate(ul, diaplacement);
    });
</script>

效果:

相關文章
相關標籤/搜索