亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react如何實現導航欄二級聯動

發布時間:2022-03-08 13:38:39 來源:億速云 閱讀:305 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關react如何實現導航欄二級聯動的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

具體內容如下

效果圖

react如何實現導航欄二級聯動

js代碼

import { Component } from "react";
import './scroll.less'
 
class Scroll extends Component {
    constructor(...args) {
        super(...args)
        this.state = {
            list: [
                { id: 1, title: '列表1' },
                { id: 2, title: '列表2' },
                { id: 3, title: '列表3' },
                { id: 4, title: '列表4' },
                { id: 5, title: '列表5' },
                { id: 6, title: '列表6' },
                { id: 7, title: '列表7' },
                { id: 8, title: '列表8' },
                { id: 9, title: '列表9' },
                { id: 10, title: '列表10' },
                { id: 11, title: '列表11' },
                { id: 12, title: '列表12' },
                { id: 13, title: '列表13' },
                { id: 14, title: '列表14' },
                { id: 15, title: '列表15' },
                { id: 16, title: '列表16' },
                { id: 17, title: '列表17' },
            ],
            LeftList: [
                { id: 1, title: '列表1', height: 800 },
                { id: 2, title: '列表2', height: 600 },
                { id: 3, title: '列表3', height: 500 },
                { id: 4, title: '列表4', height: 900 },
                { id: 5, title: '列表5', height: 450 },
                { id: 6, title: '列表6', height: 300 },
                { id: 7, title: '列表7', height: 900 },
                { id: 8, title: '列表8', height: 1010 },
                { id: 9, title: '列表9', height: 300 },
                { id: 10, title: '列表10', height: 600 },
                { id: 11, title: '列表11', height: 400 },
                { id: 12, title: '列表12', height: 760 },
                { id: 13, title: '列表13', height: 580 },
                { id: 14, title: '列表14', height: 630 },
                { id: 15, title: '列表15', height: 540 },
                { id: 16, title: '列表16', height: 983 },
                { id: 17, title: '列表17', height: 610 },
            ],
            curr: 0,//存儲下標
        }
        // 默認添加一個 因為第一個的scrollTop值是0
        this.LeftHeight = [0]
        // 滾動的開關
        this.Swich = true
    }
    // 渲染完成獲取每一個列表距離頂部的距離
    componentDidMount() {
        // 定義為0 每次就可以循環加起來就是盒子距離頂部的距離
        this.Height = 0
        // 循環獲取每一個的高
        for (var i = 0; i < this.state.LeftList.length - 1; i++) {
            this.Height += this.state.LeftList[i].height
            // 將它添加到數組中
            this.LeftHeight.push(this.Height)
        }
    }
    //   點擊左側列表 點擊獲取下標
    fnTab(Ind) {
        // 點擊的時候讓右邊的滾動事件為false
        this.Swich = false
        // 存儲下標
        this.setState({
            curr: Ind
        })
        // 根據下標取出數組中對應下標的scrollTop值  就讓右邊的scrollTop為數組中取出的值
        this.refs['rightItem'].scrollTop = this.LeftHeight[Ind];
 
        // this.refs.scrollLeft.scrollTop = this.state.curr - 4 * 58.89
    }
    FnScroll() {
        // 監聽滾動
        this.scrollTop = this.refs['rightItem'].scrollTop
        // 這邊用開關判斷是否執行
        if (this.Swich) {
            // 存放下標
            let num = 0
            // 循環取出數組中的數值
            for (var i = 0; i < this.LeftHeight.length - 1; i++) {
                if (this.scrollTop >= this.LeftHeight[i]) {
                    num = i
                }
            }
            // 存儲下標
            this.setState({
                curr: num
            })
        }
        // 判斷滾動的值和數組中的值相等 開關為true
        if (this.scrollTop == this.LeftHeight[this.state.curr]) {
            setTimeout(() => {
                this.Swich = true;
            });
        }
    }
    render() {
        return (
            <div className='box'>
                <div className='scroll'>
                    <div className='scroll-right' ref='scrollLeft'>
                        {this.state.list.map((item, index) => <div className='right-item' className={this.state.curr === index ? "active" : "right-item"} key={item.id} onClick={this.fnTab.bind(this, index)} >{item.title}</div>)}
                    </div>
                    <div className='scroll-left' ref='rightItem' onScroll={this.FnScroll.bind(this)}>
                        {this.state.LeftList.map((item) => <div className='left-item' key={item.id} style={{ height: item.height }}><div className='item-title'>{item.title}</div></div>)}
                    </div>
 
                </div>
            </div>
        )
    }
}
export default Scroll

less代碼

* {
    margin: 0;
    padding: 0;
}
 
.box {
    width: 100vw;
    height: 100vh;
    background: red;
 
    .scroll {
        width: 100vw;
        height: 100vh;
        display: flex;
 
        // 右邊列表
        .scroll-right {
            width: 25vw;
            background: aqua;
            font-size: 28px;
            height: 100vh;
            overflow-y: auto;
 
            .right-item {
                width: 25vw;
                height: 80px;
                text-align: center;
                line-height: 80px;
                border-bottom: 1px solid #ccc;
            }
 
            .active {
                height: 80px;
                text-align: center;
                line-height: 80px;
                background: #0f0;
            }
        }
 
        // 左邊內容
        .scroll-left {
            width: 75vw;
            height: 100vh;
            overflow-y: auto;
            //滾動的更加絲滑
            scroll-behavior: smooth;
 
            .left-item {
                width: 75vw;
                font-size: 30px;
                text-align: center;
 
 
                .item-title {
                    height: 30px;
                    background: #ccc;
                }
            }
        }
    }
}

感謝各位的閱讀!關于“react如何實現導航欄二級聯動”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正蓝旗| 奉化市| 宜黄县| 华池县| 姚安县| 右玉县| 梨树县| 临汾市| 贺兰县| 仙桃市| 南皮县| 深泽县| 昭平县| 苏尼特左旗| 科尔| 阿城市| 金阳县| 进贤县| 丘北县| 辽宁省| 土默特右旗| 广东省| 新巴尔虎左旗| 千阳县| 永靖县| 通榆县| 自治县| 壶关县| 玉田县| 涞水县| 雅安市| 丰台区| 大姚县| 来凤县| 恩施市| 黑龙江省| 庆城县| 荣成市| 淄博市| 苏尼特左旗| 泰州市|