js实现左右列表对齐(左边点击时,右边滚动和左边对齐。反之右边点击时,左边滚动和右边对齐)

news2025/1/17 9:06:13

需求:

js实现左右列表对其(左边点击时,右边滚动和左边对齐。反之右边点击时,左边滚动和右边对齐)
效果示意图:
效果示意图
点击6666的效果图如下:
效果图

实现代码:

思路:

1…需要一个东西把两个列表里的项关联起来,我用的id。左边就是left+id ,右边是 right+id.
2…点击左侧,右边滚动。获取当前点击的元素距离其父元素的顶部距离(offsetTop),右则相同id距离其父元素的顶部距离(offsetTop)。左则距离-右侧距离 。当左侧有滚动时,则需要左则距离-右侧距离 + 左侧滚动距离

3…点击右侧,左边滚动。
jsx代码:

const Home1 = () => {
  const listRef = useRef([]);
  const list = [
    {
      text: "555555",
      id: 1
    },
    {
      text: "6666",
      id: 2
    },
    {
      text: "7777",
      id: 3
    },
    {
      text: "8888",
      id: 4
    },
    {
      text: "9999",
      id: 5
    },
    {
      text: "10000",
      id: 6
    }
  ];

  const clickTxt = (id) => { //点击左侧事件
    let domId = "right" + id;
    let dom = document.getElementById(domId);
    let right = document.getElementById("right");
    const offsetTop = dom.offsetTop;

    let domIdL = "left" + id;
    let domL = document.getElementById(domIdL);
    let left = document.getElementById("left");
    const offsetTopL = domL.offsetTop;
    let scrollNum
    if (left.scrollTop > 0) { //左侧 滚动距离 大于0 则 右-左
      scrollNum = offsetTop - offsetTopL + left.scrollTop;
    } else {
      scrollNum = offsetTop - offsetTopL;
    }
    right.scrollTop = scrollNum;
  }


  const clickTxt1 = (id) => { //点右侧事件
    let domId = "left" + id;
    let dom = document.getElementById(domId);
    let left = document.getElementById("left");
    const offsetTop = dom.offsetTop;

    let domIdR = "right" + id;
    let domR = document.getElementById(domIdR);

    const offsetTopR = domR.offsetTop;
    let scrollNum
    if (right.scrollTop > 0) { //右侧 滚动距离 大于0 则 左-右
      scrollNum = offsetTop - offsetTopR + right.scrollTop;
    } else {
      scrollNum = offsetTop - offsetTopR;
    }
    left.scrollTop = scrollNum;
  }
  return (
    <div className={styles.home1} style={{ height: '100vh', padding: 20 }}>
      <div className={styles.left} id='left'>

        {
          list.map((item, index) => {
            return <div onClick={() => clickTxt(item.id)} className={styles.item} key={index} id={"left" + item.id}>
              {
                item.text
              }
            </div>
          })
        }
      </div>

      <div className={styles.right} id='right'>
        {
          list.map((item, index) => {
            return <div onClick={() => clickTxt1(item.id)} className={styles.itemRight} key={index} id={"right" + item.id}>
              {
                item.text
              }
            </div>
          })
        }
      </div>
    </div>
  )
}

export default Home1

less代码:

.home1{
    display: flex;
    
}
.left,.right{
    width: 50%;
    height: 100%;
    height: 900px;
    overflow-y: auto;
}
.item{
    width: 100%;
    height: 200px;
    border: 1px solid red;
    cursor: pointer;
}
.itemRight{
    width: 100%;
    height: 300px;
    border: 1px solid gray;
    cursor: pointer;
}

总结:

我这个是react里实现的,不过 主要是思路和代码,这个代码js,vue基本都能用。还可以改用ref,不用 documnet。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/829562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日期类相关练习题

前言 本文记录一些有关日期类的oj题题解,实现过日期类小项目的可以练一下手,本文不做过多讲解. 目录 前言一、求123...n题目介绍:解题思路:代码实现: 二、计算日期到天数转换题目介绍:解题思路:代码实现: 三、日期累加题目介绍:解题思路:代码实现 四、日期差值题目介绍代码实…

W6100-EVB-PICO做DNS Client进行域名解析

前言 在上一章节中我们用W6100-EVB-PICO通过dhcp获取ip地址&#xff08;网关&#xff0c;子网掩码&#xff0c;dns服务器&#xff09;等信息&#xff0c;给我们的开发板配置网络信息&#xff0c;成功的接入网络中&#xff0c;那么本章将教大家如何让我们的开发板进行DNS域名解…

四、JVM-对象内存模型

Java对象内存模型 一个Java对象在内存中包括3个部分&#xff1a;对象头、实例数据和对齐填充 数据 内存 – CPU 寄存器 -127 补码 10000001 - 11111111 32位的处理器 一次能够去处理32个二进制位 4字节的数据 64位操作系统 8字节 2的64次方的寻址空间 指针压缩技术 JDK1.6出…

聚观早报 | iPhone 15 Pro系列有望成为苹果三年来最大升级

【聚观365】8月3日消息 苹果三年来最大升级 小米驰援北京河北暴雨救灾 印度要求特斯拉仿效苹果 比亚迪7月新能源车销量同比增长61% 富士康计划在印度新建两家零件工厂 苹果三年来最大升级 苹果将继续在今年9月举办一年一度的秋季新品发布会&#xff0c;届时全新的iPhone …

GC 深入(小白,对gc有一个进一步的了解)

垃圾回收器的搭配 一般固定 一般这年轻代垃圾回收器&#xff0c;老年代垃圾回收器&#xff0c;如上图搭配着使用 1.8呢默认就是最后边那哥俩 jvm调优 一个就是增加吞吐量 一个就是减少STW的时间。 三色标记算法&#xff08;理解根可达算法&#xff09; 并发的可达性分析 有…

8.2Jmeter5.1:察看结果树的响应结果乱码

【问题描述】 Jmeter察看结果树的响应结果乱码 原因&#xff1a;jmeter.properties未设置语言 【解决方案】 修改jmeter.properties的属性&#xff0c;然后重启Jmeter # The encoding to be used if none is provided (default ISO-8859-1) sampleresult.default.encodingut…

AB实验遇到用户不均匀怎么办?—— vivo游戏中心业务实践经验分享

作者&#xff1a;vivo 互联网数据分析团队 - Li Bingchao AB实验是业务不断迭代、更新时最高效的验证方法之一&#xff1b;但在进行AB实验效果评估时需要特别关注“用户不均匀”的问题&#xff0c;稍不注意&#xff0c;产出的研究结论就可能谬以千里&#xff0c;给业务决策带来…

百度搭台,千家打擂,文心杯创业大赛成投资人新宠?

“百模大战”打响&#xff0c;掀起大模型领域“创业热潮”。今年5月31日&#xff0c;百度启动“文心杯”创业大赛&#xff08;后简称“大赛”&#xff09;&#xff0c;不到1个月报名时间&#xff0c;吸引近1000个项目激烈角逐&#xff0c;在知名投资人和AI专家的权威评审和层层…

.Net6 Core Web API 配置 log4net + MySQL

目录 一、导入NuGet 包 二、添加配置文件 log4net.config 三、创建MySQL表格 四、Program全局配置 五、帮助类编写 六、效果展示 小编没有使用依赖注入的方式。 一、导入NuGet 包 ---- log4net 基础包 ---- Microsoft.Extensions.Logging.Log4Net…

go逆向符号恢复

前言 之前一直没怎么重视&#xff0c;结果发现每次遇到go的题都是一筹莫展&#xff0c;刷几道题练习一下吧 准备 go语言写的程序一般都被strip去掉符号了&#xff0c;而且ida没有相关的签名文件&#xff0c;没办法完成函数名的识别与字符串的定位&#xff0c;所以第一步通常…

HCIP——BGP反射器及联邦

BGP反射器及联邦 一、路由反射器1、路由反射器的角色2、路由反射规则3、路由反射器下的防环Originator_IDCluster_List应用举例配置方法 二、联邦1、联邦概念2、联邦的配置 路由反射器和联邦是两种专门针对IBGP水平分割设计的解决方案&#xff0c;我们依次来看下这两种技术 一…

基于 Llama2 和 OpenVINO™ 打造聊天机器人

点击蓝字 关注我们,让开发变得更有趣 作者 | 英特尔 AI 软件工程师 杨亦诚 指导 | 英特尔 OpenVINO 布道师 武卓博士 排版 | 李擎 基于 Llama2 和 OpenVINO™ 打造聊天机器人 Llama 2是 Meta 发布了其最新的大型语言模型&#xff0c;Llama2 是基于 Transformer 的人工神经网络&…

SpringCloudAlibaba之Nacos服务的发现与注册中心(一)

一&#xff1a;搭建nacos服务 在windows上搭建&#xff1a; 下载nacos &#xff0c;我在本地下载的是2.1.0 Releases alibaba/nacos (github.com)https://github.com/alibaba/Nacos/releases SpringCloudAlibaba &#xff0c;SpringCoud及Spring Boot之间版本的对应关系在以…

大麦订单生成器 大麦一键生成订单截图

后台一键生成链接&#xff0c;独立后台管理 教程&#xff1a;修改数据库config/Conn 不会可以看源码里有教程 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

ACID特性、CAP理论、BASE原则详解

一、ACID 事务&#xff08;transaction&#xff09;&#xff1a;用户定义的一系列执行SQL的操作&#xff0c;这些操作要么完全执行&#xff0c;要么都不执行。 关系型数据库中的事务具有ACID特性 原子性(Atomicity)一致性&#xff08;Consistency&#xff09;隔离性&#xf…

红外NEC通信协议

一、NEC简介 红外(Infrared&#xff0c;IR)遥控是一种无线、非接触控制技术&#xff0c;常用于遥控器、无线键盘、鼠标等设备之间的通信。IR协议的工作原理是&#xff0c;发送方通过红外线发送一个特定的编码&#xff0c;接收方通过识别该编码来执行相应的操作。 IR协议是指红外…

JDK, JRE和JVM之间的区别和联系

JDK, JRE和JVM是与Java编程语言相关的三个重要的概念&#xff0c;它们分别代表Java Development Kit&#xff08;Java开发工具包&#xff09;、Java Runtime Environment&#xff08;Java运行时环境&#xff09;和Java虚拟机&#xff08;Java Virtual Machine&#xff09;。它们…

PHP8的运算符-PHP8知识详解

运算符是可以通过给出的一或多个值&#xff08;用编程行话来说&#xff0c;表达式&#xff09;来产生另一个值&#xff08;因而整个结构成为一个表达式&#xff09;的东西。 PHP8的运算符有很多&#xff0c;按类型分有一元运算符、二元运算符、三元运算符。 一元运算符只对一…

Java类与对象详解(2)

this引用 为什么要有this引用 先来看一个日期类的例子&#xff1a; ​ public class Date {public int year;public int month;public int day;//设置日期方法public void setDay(int y, int m, int d){//这里隐藏了一个Date this参数year y;month m;day d;}public void …

广州银行信用卡中心:强化数字引擎安全,实现业务稳步增长

广州银行信用卡中心是全国城商行中仅有的两家信用卡专营机构之一&#xff0c;拥有从金融产品研发至销售及后期风险控制、客户服务完整业务链条&#xff0c;曾获“2016年度最佳创新信用卡银行”。 数字引擎驱动业务增长 安全左移降低开发风险 近年来&#xff0c;广州银行信用卡…