当前位置:首页 > JavaScript

js ul 左右滑动js实现

2026-02-02 12:21:18JavaScript

实现UL元素左右滑动的方法

使用CSS和JavaScript结合实现UL元素的左右滑动效果,可以通过以下方法完成。

方法一:使用CSS的overflow和scroll-behavior属性

<style>
  .scroll-container {
    width: 300px;
    overflow-x: auto;
    scroll-behavior: smooth;
    white-space: nowrap;
  }
  .scroll-container ul {
    display: inline-block;
    padding: 0;
    margin: 0;
  }
  .scroll-container li {
    display: inline-block;
    width: 100px;
    height: 100px;
    background: #ccc;
    margin-right: 10px;
  }
</style>

<div class="scroll-container">
  <ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>Item 5</li>
  </ul>
</div>

这种方法利用了CSS的天然滚动特性,无需JavaScript即可实现基本滑动效果。

方法二:使用JavaScript控制滚动

<style>
  .slider {
    width: 300px;
    overflow: hidden;
    position: relative;
  }
  .slider ul {
    display: flex;
    padding: 0;
    margin: 0;
    list-style: none;
    transition: transform 0.3s ease;
  }
  .slider li {
    flex: 0 0 100px;
    height: 100px;
    background: #ccc;
    margin-right: 10px;
  }
  .slider-controls {
    margin-top: 10px;
  }
</style>

<div class="slider">
  <ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>Item 5</li>
  </ul>
</div>
<div class="slider-controls">
  <button class="prev">Previous</button>
  <button class="next">Next</button>
</div>

<script>
  const slider = document.querySelector('.slider ul');
  const prevBtn = document.querySelector('.prev');
  const nextBtn = document.querySelector('.next');
  let currentPosition = 0;
  const itemWidth = 110; // 100px width + 10px margin

  prevBtn.addEventListener('click', () => {
    currentPosition += itemWidth;
    if(currentPosition > 0) currentPosition = 0;
    slider.style.transform = `translateX(${currentPosition}px)`;
  });

  nextBtn.addEventListener('click', () => {
    const maxScroll = -(slider.scrollWidth - slider.parentElement.offsetWidth);
    currentPosition -= itemWidth;
    if(currentPosition < maxScroll) currentPosition = maxScroll;
    slider.style.transform = `translateX(${currentPosition}px)`;
  });
</script>

这种方法通过JavaScript动态计算滚动位置,使用CSS transform实现平滑滑动效果。

方法三:使用Intersection Observer API实现自动滑动

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if(entry.isIntersecting) {
      // 当元素进入视口时执行滑动动画
      entry.target.style.transform = 'translateX(0)';
    }
  });
}, {threshold: 0.1});

document.querySelectorAll('.slider li').forEach(item => {
  observer.observe(item);
});

这种方法适合在滚动容器中自动检测元素位置并触发滑动效果。

方法四:触摸设备支持

const slider = document.querySelector('.slider ul');
let isDown = false;
let startX;
let scrollLeft;

slider.addEventListener('mousedown', (e) => {
  isDown = true;
  startX = e.pageX - slider.offsetLeft;
  scrollLeft = slider.scrollLeft;
});

slider.addEventListener('mouseleave', () => {
  isDown = false;
});

slider.addEventListener('mouseup', () => {
  isDown = false;
});

slider.addEventListener('mousemove', (e) => {
  if(!isDown) return;
  e.preventDefault();
  const x = e.pageX - slider.offsetLeft;
  const walk = (x - startX) * 2;
  slider.scrollLeft = scrollLeft - walk;
});

// 触摸事件支持
slider.addEventListener('touchstart', (e) => {
  isDown = true;
  startX = e.touches[0].pageX - slider.offsetLeft;
  scrollLeft = slider.scrollLeft;
});

slider.addEventListener('touchend', () => {
  isDown = false;
});

slider.addEventListener('touchmove', (e) => {
  if(!isDown) return;
  const x = e.touches[0].pageX - slider.offsetLeft;
  const walk = (x - startX) * 2;
  slider.scrollLeft = scrollLeft - walk;
});

这种方法添加了对触摸设备的支持,使滑动效果在移动设备上也能正常工作。

方法五:使用第三方库

对于更复杂的滑动需求,可以考虑使用成熟的第三方库如:

js ul 左右滑动js实现

  • Swiper.js
  • Glide.js
  • Slick Carousel

这些库提供了丰富的配置选项和响应式设计,可以快速实现各种滑动效果。

标签: jsul
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…