当前位置:首页 > 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即可实现基本滑动效果。

js ul 左右滑动js实现

方法二:使用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);
});

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

js ul 左右滑动js实现

方法四:触摸设备支持

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;
});

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

方法五:使用第三方库

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

  • Swiper.js
  • Glide.js
  • Slick Carousel

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

标签: jsul
分享给朋友:

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…