HTML元素横向滚动

本文介绍如何在TS版本的JavaScript中通过移除类型注解简化'initScroll'函数,实现横向滚动的事件监听和处理。

ts版的 js把类型去掉就行 

/**
 * 横向滚动
 * @param domObj
 */
export function initScroll(domObj: HTMLElement) {
  domObj.addEventListener('mousewheel', handler, false);

  function handler(event: any) {
    // 获取滚动方向
    const detail = event.wheelDelta || event.detail;
    // 定义滚动方向,其实也可以在赋值的时候写
    const moveForwardStep = 1;
    const moveBackStep = -1;
    // 定义滚动距离
    let step = 0;
    // 判断滚动方向,这里的100可以改,代表滚动幅度,也就是说滚动幅度是自定义的
    if (detail < 0) {
      step = moveForwardStep * 100;
    } else {
      step = moveBackStep * 100;
    }
    // 对需要滚动的元素进行滚动操作
    domObj.scrollLeft += step;
  }
}

在使用 Vant 框架实现元素横向滚动时,可以通过以下几种方式来满足不同场景下的需求: ### 使用 `van-tabs` 组件实现标签横向滚动 Vant 提供的 `van-tabs` 组件本身支持横向滚动功能,适用于标签页较多需要滚动查看的情况。该组件会自动处理选中标签在可视区域内的居中显示,特别适合模拟类似移动端 App 的标签切换效果。 ```html <template> <van-tabs v-model:active="active" scrollspy sticky> <van-tab v-for="index in 20" :key="index" :title="'标签 ' + index"> 内容 {{ index }} </van-tab> </van-tabs> </template> <script setup> import { ref } from 'vue'; const active = ref(0); </script> ``` 在此基础上,若希望实现点击某个标签后,该标签自动居中于可视区域,可以结合 JavaScript 的 `scrollIntoView` 方法进行额外控制[^2]。 --- ### 手动实现横向滚动逻辑 如果希望脱离 `van-tabs` 实现自定义的横向滚动布局,可通过以下方式手动控制滚动行为: 1. **HTML 结构与样式设置**:使用一个具有固定宽度的容器包裹多个横向排列的子元素,并通过 CSS 设置其水平滚动特性。 ```html <template> <div class="scroll-container"> <div v-for="(item, index) in items" :key="index" class="scroll-item" @click="scrollToCenter(index)" > {{ item }} </div> </div> </template> ``` ```css .scroll-container { display: flex; overflow-x: auto; white-space: nowrap; width: 100%; } .scroll-item { flex: 0 0 auto; padding: 10px; margin-right: 10px; background-color: #f5f5f5; cursor: pointer; } ``` 2. **JavaScript 控制滚动位置**:通过计算每个元素的位置,将其滚动至容器中心。 ```javascript function scrollToCenter(index) { const container = document.querySelector('.scroll-container'); const item = container.children[index]; const containerWidth = container.clientWidth; const itemWidth = item.offsetWidth; const itemLeft = item.offsetLeft; // 计算滚动位置,使元素居中 container.scrollTo({ left: itemLeft - (containerWidth / 2) + (itemWidth / 2), behavior: 'smooth' }); } ``` 此方法允许更灵活地控制滚动行为,例如在导航栏、商品推荐等场景中实现视觉上更丰富的交互体验[^3]。 --- ### 总结 - 若使用 `van-tabs`,可直接利用其内置的滚动和粘性定位功能实现标签页横向滚动。 - 对于非标签类的横向滚动需求,可借助 CSS Flex 布局配合 JavaScript 实现自定义滚动逻辑。 - 所有滚动操作均可结合 `scrollIntoView` 或手动计算偏移量来实现元素的居中显示效果[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值