1. 程式人生 > 程式設計 >React實現二級聯動效果(樓梯效果)

React實現二級聯動效果(樓梯效果)

本文例項為大家分享了React實現二級聯動效果的具體程式碼,供大家參考,具體內容如下

模仿餓了麼實現一個二級聯動的效果;

import "..//Leftrightlinkage.less";
import React,{ Component } from "react";
 
export default class Leftrightlinkage 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" },{ ihttp://www.cppcns.com
d: 5,title: "列表5" },{ id: 6,title: "列表6" },{ id: 7,title: "列表7" },{ id: 8,title: "列表8" },{ id: 9,title: "列表9" },{ id: 10,title: "列表10" },],LeftList: [ { id: 1,title: "列表1",height: 600 }, { id: 2,title: "列表2",title: "列表3",title: "列表4",{ id: 5,title: "列表5",title: "列表6",title: "列表7",title: "列表8",title: "列表9",title: "列表10",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); } } // 點選左側列表 點選獲取下標 FnTable(index) { // 點選的時候讓右邊的滾動事件為false this.Swich = false; // 儲存下標 this.swww.cppcns.com
etState({ curr: index,}); // 根據下標取出陣列中對應下標的scrollTop值 就讓右邊的scrollTop為陣列中取出的值 this.refs["leftItem"].scrollTop = this.LeftHeight[index]; } FnScroll() { // 監聽滾動 this.scrollTop = this.refs["leftItem"].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="list-left"> {this.state.list.map((item,index) => ( <div className="left-item" ref="scrollLeft" className={this.state.curr === index ? "active" : "left-item"} key={item.id} onClick={this.FnTable.bind(this,index)} > {item.title} </div> ))} </div> <div className="list-right" ref="leftItem" onScroll={this.FnScroll.bind(this)} > {this.state.LeftList.map((item) => ( <div className="right-item" wFxbofo
key={item.id} style={{ height: item.height }} > <div className="item-title">{item.title}</div> </div> ))} </div> </div> </div> ); } }

CSS樣式,檔案格式是Less格式

 .box {
     width: 100vw;
     height: 100vh;
 
     .scroll {
         width: 100vw;
         height: 100vh;
         display: flex;
 
         .list-left {
             width: 200px;
             height: 100vh;
             background: rgb(151,151,151);
 
             .left-item {
                 height: 120px;
                 text-align: center;
                 line-height: 120px;
                 color: #ffffff;
                 font-size: 36px;
                 border: 3px solid #ffffff;
                 box-sizing: border-box;
             }
 
             .active {
                 height: 120px;
                 text-align: center;
                 line-height: 120px;
                 color: #ffffff;
                 font-size: 36px;
                 border: 3px solid #ffffff;
                 background-color: #f100d9;
                 box-sizing: border-box;
             }
         }
 
         .list-right {
             width: 100vw;
             height: 100vh;
  www.cppcns.com           background-color: #15ff00;
             overflow: scroll;
 
             .right-item {
                 height: 400px;
                 border: 5px solid #0040ff;
                 font-size: 40px;
                 color: #ffffff;
                 box-sizing: border-box;
             }
         }
     }
 
 }

效果圖:

React實現二級聯動效果(樓梯效果)

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