Jquery滚动到固定位置

1.场景:外部按钮控制容器滚动条,滚动到指定id的块级元素

2.逻辑:

3.源码

/**
 * @Name:
 * @Author:
 * @Desc:  关于滚动条的一些事件
 * @Date: 2020-12-04 09:25:34
 */
import React, { Component } from "react";
import { Title } from "@/component";
import $ from "jquery";
import styles from "./styles.module.less";
const list = [
  { height: 220, id: "aa", name: "aa" },
  { height: 120, id: "bb", name: "bb" },
  { height: 420, id: "cc", name: "cc" },
  { height: 270, id: "dd", name: "dd" }
];
class Scroll extends Component {
  state = {
    scrollId: list[0].id
  };
  
  /**
   * @name scrollChange
   * @param {String} id 指定位置ID
   * @description 滚动到指定位置
   */
  scrollChange = (id) => {
    //外层离浏览器窗口顶部高
    let parTop = $("#list").offset().top;
    //目标离浏览器窗口顶部高
    let childTop = $(`#${id}`).offset().top;
    //滑动条滚动距离
    let scroll = $("#list").scrollTop();
    console.log("滚动到指定位置====", parTop, childTop, scroll);
    let top = childTop - parTop + scroll;
    $("#list").animate({ scrollTop: top - 2 });
    this.setState({ scrollId: id });
  };
  render() {
    const { scrollId } = this.state;
    return (
      <div className={styles.container}>
        <div className={styles.block}>
          <Title text="关于滚动条的一些事件" />
        </div>
        <div style={{ padding: "10px" }}>
          {list.map((v) => (
            <div className={v.id === scrollId ? styles.li_btn_active : styles.li_btn} onClick={() => this.scrollChange(v.id)}>
              {v.name}
            </div>
          ))}
        </div>
        <ul className={styles.ul} id="list">
          {list.map((v) => (
            <li className={styles.li} style={{ height: v.height }} id={v.id}>
              <h1>{v.name}</h1>
            </li>
          ))}
        </ul>
      </div>
    );
  }
}
export default Scroll;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值