最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS實現(xiàn)輪播圖小案例

 更新時間:2021年11月16日 17:28:33   作者:B.Bz  
這篇文章主要為大家詳細介紹了JS實現(xiàn)輪播圖小案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了JS實現(xiàn)輪播圖小案例的具體代碼,供大家參考,具體內容如下

分析:

  • 點擊左右箭頭 滑動輪播圖
  • 鼠標不在輪播圖內時 每隔2秒自動滑動輪播圖
  • 鼠標移入時 停止自動滑動輪播圖
  • 點擊小圓圈 顯示對應的輪播圖

1、鼠標移入、移出顯示或隱藏左右箭頭:

// 獲取左右箭頭的元素
    let arrow_l = this.document.querySelector('.arrow-l');
    let arrow_r = this.document.querySelector('.arrow-r');
    // 獲取到輪播圖盒子元素
    let focus = this.document.querySelector('.focus');

    // 輪播圖盒子添加鼠標移入移出事件 顯示或隱藏 左右箭頭
    focus.addEventListener('mouseenter', function(e) {
        arrow_l.style.display = 'block';
        arrow_r.style.display = 'block';
        // 鼠標移入的時候清除定時函數(shù),不再自動滑動輪播圖
        clearInterval(timer);
        timer = null;

    });

    focus.addEventListener('mouseleave', function(e) {
        arrow_l.style.display = 'none';
        arrow_r.style.display = 'none';
        // 鼠標移出  添加定時任務,每2秒來觸發(fā)一次點擊右箭頭的點擊
        timer = setInterval(function() {
            arrow_r.click();
        }, 2000);
    })

2、添加ol內的li標簽:

// 獲取到ul列表(輪播圖列表)和ol列表 (小圓圈列表)元素
var ul = focus.querySelector('ul');
// 此時ol列表內沒有元素
var ol = focus.querySelector('.circle');
// 循環(huán)輪播圖列表 有多少張輪播圖就添加多少個小圓圈
for (var i = 0; i < ul.children.length; i++) {
        // 創(chuàng)建li標簽
        var li = this.document.createElement('li');
        // 給li標簽添加自定義屬性 為輪播圖的下標 用于
        li.setAttribute('l-index', i);
        // ol標簽添加li標簽
        ol.appendChild(li);
        // 每一個li標簽添加點擊函數(shù)
        li.addEventListener('click', function() {
            // 清除所有小圓圈的樣式
            for (var j = 0; j < ol.children.length; j++) {
                ol.children[j].className = '';
            }
            // 點擊哪一個小圓圈  就添加樣式
            this.className = 'current';

   // 點擊小圓圈  更改num和circl 來更換輪播圖
            num = this.getAttribute('l-index');
            circl = this.getAttribute('l-index');
            // 動畫效果
            animate(ul, -num * focusWidth);
        })

    }

3、復制第一張輪播圖到ul的最后,顯得輪播圖更自然,添加記錄輪播圖的下標和記錄小圓圈的下標,添加節(jié)流閥:
節(jié)流閥

添加一個節(jié)流閥 默認為true 如果點擊之后立即改為false 如果沒處理完上次點擊的事件 這個時間內的點擊事件不再處理
類似一個鎖,當鎖住的時候只做一件事,別的點擊不會再做,等什么時候開了鎖,什么時候才可以做。

// 克隆一個第一張輪播圖的節(jié)點添加到ul內
// 播放到最后一個的時候  轉到第一個看著有連貫性
    ol.children[0].className = 'current';
    let cloneLi = ul.children[0].cloneNode(true);
    ul.appendChild(cloneLi);

    // 添加一個下標  來記錄輪播圖播放到了第幾張
    num = 0;
    // 與num類似,記錄小圓圈的下標
    circl = 0;
    // 添加節(jié)流閥
    flag = true;

4、右箭頭、左箭頭的點擊事件和小圓圈更改樣式:

// 點擊右箭頭的  點擊事件
arrow_r.addEventListener('click', function(e) {
        // 添加一個節(jié)流閥 默認為True 如果點擊之后立即改為false  如果沒處理完上次點擊的事件 這個時間內的點擊事件不再處理
        if (flag) {
            // 改變節(jié)流閥的狀態(tài)
            flag = false;

            // 如果num下標為最后一張 就恢復到第一張 把num下標改為默認0
            if (num == ul.children.length - 1) {
                ul.style.left = 0;
                num = 0;

            }
            // num下標加1
            num++;
            // 改變動畫效果 滑動到  第幾張輪播圖 * 一張的寬度 的距離
            animate(ul, -num * focusWidth, function() {
                // 回調函數(shù)設置節(jié)流閥為true  可以再次點擊
                flag = true;
            });

            // 小圓圈+1
            circl++;
            // 如果小圓圈到了最后一個  恢復為0
            if (circl == ul.children.length - 1) {
                circl = 0;
            }
            // 改變小圓圈的樣式
            circlChange();
        }
    })
// 左箭頭的點擊事件
    arrow_l.addEventListener('click', function(e) {
        if (flag) {
            flag = false;
            // 判斷為0時說明是從第一張開始往左點
            if (num == 0) {
                // 更改num下標為最后一個
                num = ul.children.length - 1;
                // 更改輪播圖為最后一個
                ul.style.left = -num * focusWidth + 'px';
            }
            // num -1
            num--;
            // 動畫效果
            animate(ul, -num * focusWidth, function() {
                flag = true;
            });
            // 如果小圓圈為0  說明到了第一個輪播圖
            if (circl == 0) {
                // 小圓圈到最后一個
                circl = ul.children.length - 1;
            }
            // 小圓圈-1
            circl--;
            // 改變小圓圈的樣式
            circlChange();
        }
    })
function circlChange() {
     // 遍歷ol列表  刪除每一個小圓圈的樣式
        for (var i = 0; i < ol.children.length; i++) {
            ol.children[i].className = '';
        };
        // 給當前circl下標的小圓圈添加樣式
        ol.children[circl].className = 'current';
    }

5、輪播圖動畫函數(shù)的封裝:

function animate(obj, target, callback) {
    // console.log(callback);  callback = function() {}  調用的時候 callback()


    // 先清除以前的定時器,只保留當前的一個定時器執(zhí)行
    clearInterval(obj.timer);
    obj.timer = setInterval(function() {
        // 步長值寫到定時器的里面
        // 把我們步長值改為整數(shù) 不要出現(xiàn)小數(shù)的問題
        // var step = Math.ceil((target - obj.offsetLeft) / 10);
        var step = (target - obj.offsetLeft) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        if (obj.offsetLeft == target) {
            // 停止動畫 本質是停止定時器
            clearInterval(obj.timer);
            // 回調函數(shù)寫到定時器結束里面
            // if (callback) {
            //     // 調用函數(shù)
            //     callback();
            // }
            callback && callback();
        }
        // 把每次加1 這個步長值改為一個慢慢變小的值  步長公式:(目標值 - 現(xiàn)在的位置) / 10
        obj.style.left = obj.offsetLeft + step + 'px';

    }, 15);
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • javascript簡單寫的判斷電話號碼實例

    javascript簡單寫的判斷電話號碼實例

    這篇文章主要介紹了javascript簡單寫的判斷電話號碼實例的相關資料,需要的朋友可以參考下
    2017-05-05
  • 微信小程序setInterval定時函數(shù)新手使用的超詳細教程

    微信小程序setInterval定時函數(shù)新手使用的超詳細教程

    平時開發(fā)中為實現(xiàn)倒計時效果可以使用setInterval即可,下面這篇文章主要給大家介紹了關于微信小程序setInterval定時函數(shù)新手使用的超詳細教程,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 前端使用JS內置Blob實現(xiàn)下載各種形式的文件實例

    前端使用JS內置Blob實現(xiàn)下載各種形式的文件實例

    通過使用JavaScript我們可以很方便地實現(xiàn)文件的下載功能,這篇文章主要給大家介紹了關于前端使用JS內置Blob實現(xiàn)下載各種形式文件的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • 微信小程序3D輪播實現(xiàn)代碼

    微信小程序3D輪播實現(xiàn)代碼

    這篇文章主要介紹了微信小程序3D輪播實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 詳解js前端代碼異常監(jiān)控

    詳解js前端代碼異常監(jiān)控

    本文主要介紹了js代碼異常監(jiān)控的相關知識。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • js使用visibilitychange處理頁面關閉事件

    js使用visibilitychange處理頁面關閉事件

    本文主要介紹了js使用visibilitychange處理頁面關閉事件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • vue 集成騰訊地圖實現(xiàn)api(附DEMO)

    vue 集成騰訊地圖實現(xiàn)api(附DEMO)

    之前項目使用騰訊地圖,不利于開發(fā)者查找,這篇文章主要介紹了vue 集成騰訊地圖實現(xiàn)api,具有一定的參考價值,感興趣的可以了解下
    2021-07-07
  • JS實現(xiàn)一次性彈窗的方法【刷新后不彈出】

    JS實現(xiàn)一次性彈窗的方法【刷新后不彈出】

    這篇文章主要介紹了JS實現(xiàn)一次性彈窗的方法,可實現(xiàn)一次性彈出,刷新后不彈出的功能,涉及JS窗口操作的相關技巧,需要的朋友可以參考下
    2016-12-12
  • 詳解javascript中的Strict模式

    詳解javascript中的Strict模式

    我們都知道javascript是一個弱類型語言,在ES5之前,javascript的程序編寫具有很強的隨意性,我可以稱之為懶散模式(sloppy mode)。比如可以使用未定義的變量,可以給對象中的任意屬性賦值并不會拋出異常等等。本文將詳細介紹javascript中的Strict模式。
    2021-06-06
  • javascript實現(xiàn)鼠標放上后下邊對應內容變換的效果

    javascript實現(xiàn)鼠標放上后下邊對應內容變換的效果

    這篇文章主要介紹了javascript鼠標放上后下邊對應內容變換的方法,實例分析了javascript實現(xiàn)tab切換的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08

最新評論

焉耆| 新巴尔虎右旗| 新巴尔虎右旗| 阜康市| 和顺县| 石嘴山市| 莱芜市| 东至县| 柳江县| 大余县| 本溪| 自治县| 合肥市| 高雄市| 广州市| 连云港市| 宜兰县| 隆化县| 垦利县| 庆城县| 建昌县| 武汉市| 清水县| 手机| 普洱| 西安市| 平遥县| 米泉市| 沾益县| 木里| 原平市| 河津市| 贵州省| 南丹县| 衡东县| 铜梁县| 苍梧县| 宁海县| 荔波县| 新宾| 将乐县|