1. 程式人生 > >佈局和js的輪播圖

佈局和js的輪播圖

一.   浮動與定位

浮動:float: left | right

定位:position:relative | absolute | fixed

 

1.浮動與相對定位結合使用

/*盒子採用的是浮動佈局為主, 相對定位可以輔助其子級絕對定位佈局, 也可以在浮動佈局基礎上微調 */

 

採用相對定位佈局, 在浮動佈局基礎上微調, 不影響兄弟盒子的佈局

採用盒模型佈局, 在浮動佈局基礎上微調, 影響兄弟盒子的佈局

 

2.浮動與絕對定位結合使用

盒子採用絕對定位佈局, 浮動佈局失效

為什麼: 因為兩者都是脫離文件流, 絕對定位為完全脫離文件流

脫離文件流: 盒子的寬度可以由內容撐開

 

 

 

二.   Js  更改活躍狀態

let active_index = 0;  // 活躍狀態的索引

for (let i = 0; i < lis.length; i++) {

    lis[i].onmouseover = function () {

        // 清除之前活躍的

        lis[active_index].className = "";

        // 設定自身為活躍

        this.className = "active";

        // 更新活躍索引

        active_index = i;

    }

 

作用域的問題:

// 不要去使用全域性變數, 不同的js邏輯程式碼塊如果重複命名, 要麼報重新命名錯誤, 要麼資料覆蓋出現變數汙染

// 每一個js邏輯程式碼塊可以通過匿名函式的自呼叫完成區域性作用域

(function(){

    let a = 10;

})()

(function(){

    let a = 20;

})() 

 

頁面的結構問題(結構的搭建很重要)

 

let main_lis = document.querySelectorAll('.main li');

// 分析資料結構與頁面結構,將指定資料渲染到指定位置

function updateData(index) {

    let dataArr = data[index];

    for (let i = 0; i < dataArr.length; i++) {

        let h2 = main_lis[i].querySelector('h2');

        h2.innerText = dataArr[i].title;

        let img = main_lis[i].querySelector('img');

        img.setAttribute('src', dataArr[i].img_url);

        let p = main_lis[i].querySelector('p');

        p.innerText = dataArr[i].info;

    }

}

 

 

 

三.   輪播圖

// 下一張

right_btn.onclick = function () {

    // 清除之前活躍的圖片和tag

    img_lis[active_index].className = "";

    tag_lis[active_index].className = "";

 

    // 索引切換(更新活躍索引)

    // 安全性: 最後一張的下一張應該是第一張

    if (active_index == 4) active_index = -1;

    active_index++;

 

    // 設定將要活躍的圖片和tag

    img_lis[active_index].className = "active";

    tag_lis[active_index].className = "active";

};

// active_index 記錄了當前活躍狀態的索引, 且所有邏輯共有

// 無限錄播時考慮索引邊界切換的問題