iT邦幫忙

0

#HTML 動態更換 ul li 位置

  • 分享至 

  • xImage

各位前輩好,我目前在撰寫公司內部的文件瀏覽網頁,
現在有一個帶有卷軸的標題列,我預設他只會顯示四個標題,
當我按下 "下一個" 或 "上一個" 時,才會將第一個標題隱藏、第五個標題顯示,
同時他會滾動卷軸,以讓標題可以完整顯示出來,
但我的 ScrollerBar 是自訂樣式的,且我有思考過,如果用更改 position 的方式,
頁面上全部的卷軸都會被我一起更改(因為卷軸都是一樣的),
目前我已經把動態更換標題的功能做出來了,想請教一下前輩們有沒有什麼想法?
這邊只貼點選下一個的 Code,因為點選上一個的 Code 大致相同。

JS:

function clickNext() {
    // 找出 id = smallTitle 的 li 內的 <a> 元素
    var elems = $('#smallTitle li a');
    // 找出現在被點擊的 id
    var activeIndex;
    for (var i = 0; i < elems.length; i++) {
        if (elems[i].classList.contains('action')) {
        activeIndex = i;
        break;
        }
    }

    // 將下一個 index 設為現在被點擊的標題 + 1
    var nextIndex = activeIndex + 1;
    // 設變數 quo = ( 下一個標題 + 1)的商數
    var quo = (parseInt((nextIndex + 1) / 4));
    // 判斷下一個標題是否 >= 4;以及下一個標題是否不等於標題列長度
    if (nextIndex >= 4 && nextIndex != elems.length) {
        // 若是,則先取下一個標題 index 的餘數
        var mod = (nextIndex + 1) % 4;
        // 判斷如果商數 >= 2
        if(parseInt((nextIndex + 1) / 4) >= 2){
        // 設定變數 hideIndex
        var hideIndex = nextIndex - 4;
        // 就將第 hideIndex 個標題隱藏(加入 hide)
        elems[hideIndex].classList.add('hide');
        // 將下一個標題顯示(拔掉 hide)
        elems[nextIndex].classList.remove('hide');
        // 將目前被點擊的標題的 action 拔掉
        elems[activeIndex].classList.remove('action');
        // 使下一個標題被點擊(加入 action)
        elems[nextIndex].classList.add('action');
        }else {
        // 反之若商數 <= 2,就把第 mod - 1 個標題隱藏(加入 hide)
        elems[mod - 1].classList.add('hide');
        // 將下一個標題顯示(拔掉 hide)
        elems[nextIndex].classList.remove('hide');
        // 將目前被點擊的標題的 action 拔掉
        elems[activeIndex].classList.remove('action');
        // 使下一個標題被點擊(加入 action)
        elems[nextIndex].classList.add('action');
        }
    // 第一個判斷式若不成立,就繼續判斷若下一個標題的 index,等於標題列的長度
    }else if (nextIndex === elems.length) {
        // 就把下一個標題的 index 設為 0;
        nextIndex = 0;
        // 將目前被點擊的標題的 action 拔掉
        elems[activeIndex].classList.remove('action');
        // 使下一個標題被點擊(加入 action)
        elems[nextIndex].classList.add('action'); 
        // 將下一個標題顯示(拔掉 hide)
        elems[nextIndex+1].classList.remove('hide');
        // 用標題列的長度去跑迴圈,且 len 小於標題列的長度,
        // 只要條件成立就將第 len % 4 個標題顯示
        for(var len = elems.length; len >= 4; len--){
        elems[len % 4].classList.remove('hide');
        }
        // 用標題列的長度去跑迴圈,且 k = 4 並遞增,
        // 只要條件成立就會把第 k 個標題顯示
        for (var k = 4; k < elems.length; k++) {
        elems[k].classList.add('hide');
        }
    }else {
        // 目前被點擊的標題的 action 拔掉
        elems[activeIndex].classList.remove('action');
        // 使下一個標題被點擊(加入 action)
        elems[nextIndex].classList.add('action');
    }
}

CSS:

.SwitchURL-small-link.action {
    border-bottom: 2px solid#AE96DA;
    color: #AE96DA;
    margin-right: 15px;
}
.SwitchURL-small-link.hide {
    display:none;
}
archer9080 iT邦研究生 3 級 ‧ 2021-09-08 16:27:07 檢舉
focus在元素上(?
沒有實境所以亂猜
不知道行不行,也沒試過
不行就當我沒說@@
@archer9080 請問您是指 focus 什麼?
有點不太懂您的意思。
archer9080 iT邦研究生 3 級 ‧ 2021-09-08 17:26:27 檢舉
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus
建議至codepen or jsfiddle 模擬情境
光是敘述有太多模糊空間 (對我來說)
或是待其他前輩解答囉~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0

我只提示你幾個重點及方法。

1.利用一下元件的TOP值來做捲軸top定位。off???啥鬼的
2.使用繪圖後再用背景式顯示處理。(這很麻煩不建議)

可以參照「直立式跑馬燈」的做法。

我要發表回答

立即登入回答