卖坚果的怪叔叔 卖坚果的怪叔叔
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
首页 › 技术 › 网页点击平滑滚动效果~

网页点击平滑滚动效果~

坚果大叔
2024-10-17 16:43:08技术阅读 4,150

不管在移动端或者 PC 端,当段落内容过长的时候我们都期望有快捷方式能够快速定位到某一段落,省去鼠标滚动的繁琐。

思路

这种效果实现的方式因人而异有多种方式,不管是 Js实现还是 Css 实现无非是看开发者的个人习惯。并没有任何你强他弱的区分,功能实现丝滑、代码易维护就好。

下面是移动端菜单点击滚动到当前菜单和 PC 端定位到当前段落的实现方式。

在移动端有时候有这些的设计效果,比如商品的分类很多,但是设计设计的时候只有一行,左右滚动,那么这时候你点击后面的时候希望在点击的时候自动将点击的菜单移动到视图的中央区域,这样后面被遮挡的菜单可以跟随往前移动。

当然你也可以手动滑动。另外还有个就是从前一个页面带参数进来的时候也可以自动滚动到当前菜单的位置。

HTML代码

     <div class="listMenuCont" ref="listMenuCont">
        <div
          class="listMenu"
          ref="listMenu"
          :style="{ width: (225 * mobileMenuData.length) / 100 + 'rem' }"
        >
          <div
            class="listMenuItem"
            :data-id="list.id"
            :class="mobileCurrentId == list.id && 'listMenuCurrent'"
            v-for="list in mobileMenuData"
            @click="mobileMenuClick(list.id)"
          >
            <span>{{ list.name }}特产</span>
          </div>
        </div>
      </div>

菜单容器的宽度是当前元素的个数 * 固定宽度。

JS代码

mobileMenuClick(id) {
  const clickedItem = this.$refs.listMenu.querySelector(
    `.listMenuItem[data-id="${id}"]`
  );
  if (clickedItem) {
    const container = this.$refs.listMenuCont;
    const containerWidth = container.clientWidth;
    const itemWidth = clickedItem.offsetWidth;
    const itemOffsetLeft = clickedItem.offsetLeft;
    const scrollLeft = itemOffsetLeft - containerWidth / 2 + itemWidth / 2;
    container.scrollTo({
      left: scrollLeft,
      behavior: "smooth",
    });
  }
}

PC 端在商品详情的时候可能有多个 Tab,但是他不是切换隐藏,而是在同一个页面。这时候点击 tab的时候就希望能够自动定位到当前 tab的位置。

当然如果往下滚动的时候内容过长,我们还希望 tab 能够悬浮在浏览器顶端方便我们点击。

HTML代码

当点击changeIntroduceMenu的时候根据配置的 id 自动线性滑动到对应 id的内容位置。

        <div class="webShopIntroduce">
          <div class="webShopIntroduceMenu flex">
            <div
              class="introduceMenu"
              :class="introduceMenuCurrent == list.id && 'introduceMenuCurrent'"
              @click="changeIntroduceMenu(list)"
              v-for="list in introduceMenuData">
              <span>{{ list.name }}</span>
            </div>
          </div>
          <div class="content">
            <div class="imageText" id="imageText">
              <div class="title">图文介绍</div>
            </div>
            <div class="video" id="video">
              <div class="title">宣传视频</div>
            </div>
            <div class="contactUs" id="contactUs">
              <div class="title">联系方式</div>
            </div>
          </div>
        </div>

Js代码

changeIntroduceMenu(list) {
    const element = document.getElementById(list.id);
    if (element) {
       element.scrollIntoView({ behavior: 'smooth' });
    }
}

最终效果

网页点击平滑滚动效果~-卖坚果的怪叔叔
网页点击平滑滚动效果~-卖坚果的怪叔叔
赞赏 赞(4)
国庆假期的一些照片~
上一篇
我的脚是扭伤了?还是痛风发作了?
下一篇
在小程序中查看

这是个😊,挣点服务器费用😜

评论已关闭

热门文章
将博客搬至CSDN
早上小毛驴40km通勤上班~
纯CSS实现带有画布边框和刻度尺的样式
Python基础教程之数据类型和变量
如何激活Windows10?
WordPress评论留言通知推送插件!
专题标签
agent (1) CSS (15) dom (1) Es6入门系列 (14) Git (3) html (1) iview (1) JavaScript (9) js (4) Lif (1) Node (4) pyecharts (1) Python (10) ref (1) scriptable (1) Skill (1) vsCode (1) vue (4) wordpress (2) 三月 (1) 上海 (1) 假期 (1) 其他分享 (3) 前端两三问 (15) 古镇 (1) 外滩 (1) 对象 (1) 小程序 (5) 年度总结 (6) 年终总结 (1) 微信机器人 (4) 打字机 (1) 技术 (1) 日常问题 (8) 日常问题记录 (1) 春天 (2) 服务器 (2) 海族馆 (1) 生活 (8) 网上国网 (1) 记录 (3) 通勤 (1) 重学JavaScript (11) 面试题 (10) 🌸 (1)
什么是Agent?
2026-08-15 23:49:12
223 0 1
什么是 Skill?
2026-08-12 21:32:42
244 1 0
失业在家,我给小朋友做了一个练字小程序!
2026-08-07 16:21:52
457 8 1
上线8年,15万用户的小程序,一共赚了多少钱?
2026-05-30 18:01:24
4,583 4 0
4
  • 4
博主

一位佛系的前端开发者,略通摄影,乐于尝试新事物,热衷于美食。

友链
故事胶片
公众号
坚果大叔 执行上下文 卖坚果的怪叔叔 Dacking
Copyright © 2017-2026 卖坚果的怪叔叔

开往-友链接力

萌ICP备20230818号

苏ICP备18048410号-3
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
# CSS # # JavaScript # # vue # # 微信 # # 生活 #
坚果大叔
345
文章
170
评论
431
喜欢