react實現(xiàn)導(dǎo)航欄二級聯(lián)動
本文實例為大家分享了react實現(xiàn)導(dǎo)航欄二級聯(lián)動的具體代碼,供大家參考,具體內(nèi)容如下
效果圖
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,//存儲下標(biāo) ? ? ? ? } ? ? ? ? // 默認(rèn)添加一個 因為第一個的scrollTop值是0 ? ? ? ? this.LeftHeight = [0] ? ? ? ? // 滾動的開關(guān) ? ? ? ? this.Swich = true ? ? } ? ? // 渲染完成獲取每一個列表距離頂部的距離 ? ? componentDidMount() { ? ? ? ? // 定義為0 每次就可以循環(huán)加起來就是盒子距離頂部的距離 ? ? ? ? this.Height = 0 ? ? ? ? // 循環(huán)獲取每一個的高 ? ? ? ? for (var i = 0; i < this.state.LeftList.length - 1; i++) { ? ? ? ? ? ? this.Height += this.state.LeftList[i].height ? ? ? ? ? ? // 將它添加到數(shù)組中 ? ? ? ? ? ? this.LeftHeight.push(this.Height) ? ? ? ? } ? ? } ? ? // ? 點擊左側(cè)列表 點擊獲取下標(biāo) ? ? fnTab(Ind) { ? ? ? ? // 點擊的時候讓右邊的滾動事件為false ? ? ? ? this.Swich = false ? ? ? ? // 存儲下標(biāo) ? ? ? ? this.setState({ ? ? ? ? ? ? curr: Ind ? ? ? ? }) ? ? ? ? // 根據(jù)下標(biāo)取出數(shù)組中對應(yīng)下標(biāo)的scrollTop值 ?就讓右邊的scrollTop為數(shù)組中取出的值 ? ? ? ? this.refs['rightItem'].scrollTop = this.LeftHeight[Ind]; ? ? ? ? ? // this.refs.scrollLeft.scrollTop = this.state.curr - 4 * 58.89 ? ? } ? ? FnScroll() { ? ? ? ? // 監(jiān)聽滾動 ? ? ? ? this.scrollTop = this.refs['rightItem'].scrollTop ? ? ? ? // 這邊用開關(guān)判斷是否執(zhí)行 ? ? ? ? if (this.Swich) { ? ? ? ? ? ? // 存放下標(biāo) ? ? ? ? ? ? let num = 0 ? ? ? ? ? ? // 循環(huán)取出數(shù)組中的數(shù)值 ? ? ? ? ? ? for (var i = 0; i < this.LeftHeight.length - 1; i++) { ? ? ? ? ? ? ? ? if (this.scrollTop >= this.LeftHeight[i]) { ? ? ? ? ? ? ? ? ? ? num = i ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? // 存儲下標(biāo) ? ? ? ? ? ? this.setState({ ? ? ? ? ? ? ? ? curr: num ? ? ? ? ? ? }) ? ? ? ? } ? ? ? ? // 判斷滾動的值和數(shù)組中的值相等 開關(guān)為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; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? ? // 左邊內(nèi)容 ? ? ? ? .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; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
React項目配置axios和反向代理和process.env環(huán)境配置等問題
這篇文章主要介紹了React項目配置axios和反向代理和process.env環(huán)境配置等問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12React Hooks: useEffect()調(diào)用了兩次問題分析
這篇文章主要為大家介紹了React Hooks: useEffect()調(diào)用了兩次問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11React.js入門實例教程之創(chuàng)建hello world 的5種方式
React 是近期非常熱門的一個前端開發(fā)框架。應(yīng)用非常廣泛,接下來通過本文給大家介紹React.js入門實例教程之創(chuàng)建hello world 的5種方式 ,需要的朋友參考下吧2016-05-05react嵌套路由實現(xiàn)TabBar的實現(xiàn)
本文主要介紹了react嵌套路由實現(xiàn)TabBar的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08React操作真實DOM實現(xiàn)動態(tài)吸底部的示例
本篇文章主要介紹了React操作真實DOM實現(xiàn)動態(tài)吸底部的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10