当前位置:首页 > JavaScript

js实现图片滚动

2026-02-28 22:17:13JavaScript

实现图片滚动的JavaScript方法

使用CSS动画结合JavaScript控制

通过CSS定义动画效果,JavaScript控制动画的启停或方向。CSS的@keyframesanimation属性可实现平滑滚动。

.scroll-container {
  width: 100%;
  overflow: hidden;
  white-space: nowrap;
}
.scroll-content {
  display: inline-block;
  animation: scroll 10s linear infinite;
}
@keyframes scroll {
  0% { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}
const container = document.querySelector('.scroll-container');
container.addEventListener('mouseenter', () => {
  container.querySelector('.scroll-content').style.animationPlayState = 'paused';
});
container.addEventListener('mouseleave', () => {
  container.querySelector('.scroll-content').style.animationPlayState = 'running';
});

使用JavaScript定时器实现滚动

通过setInterval动态修改元素的transformmargin属性,实现逐帧滚动效果。

js实现图片滚动

const content = document.querySelector('.scroll-content');
let position = 0;
const speed = 1;

function scrollImages() {
  position -= speed;
  if (position <= -content.scrollWidth / 2) {
    position = 0;
  }
  content.style.transform = `translateX(${position}px)`;
}

const interval = setInterval(scrollImages, 16);
document.querySelector('.scroll-container').addEventListener('mouseenter', () => {
  clearInterval(interval);
});

使用requestAnimationFrame优化性能

相比setIntervalrequestAnimationFrame能更好地与浏览器刷新率同步,避免卡顿。

let animationId;
let position = 0;
const content = document.querySelector('.scroll-content');

function animate() {
  position -= 1;
  if (position <= -content.scrollWidth / 2) {
    position = 0;
  }
  content.style.transform = `translateX(${position}px)`;
  animationId = requestAnimationFrame(animate);
}

animationId = requestAnimationFrame(animate);
document.querySelector('.scroll-container').addEventListener('mouseenter', () => {
  cancelAnimationFrame(animationId);
});

无缝循环滚动的实现技巧

克隆滚动内容并拼接,当滚动到克隆部分时重置位置,实现视觉上的无缝衔接。

js实现图片滚动

const container = document.querySelector('.scroll-container');
const content = document.querySelector('.scroll-content');
content.innerHTML += content.innerHTML; // 克隆内容

function scroll() {
  container.scrollLeft += 1;
  if (container.scrollLeft >= content.scrollWidth / 2) {
    container.scrollLeft = 0;
  }
}

const interval = setInterval(scroll, 16);

响应式设计的注意事项

通过监听窗口大小变化,动态调整滚动速度或容器尺寸。

window.addEventListener('resize', () => {
  const containerWidth = document.querySelector('.scroll-container').offsetWidth;
  // 根据容器宽度调整滚动参数
});

触摸设备支持

添加touchstarttouchend事件处理,确保在移动设备上也能正常交互。

const container = document.querySelector('.scroll-container');
container.addEventListener('touchstart', () => {
  // 暂停滚动
});
container.addEventListener('touchend', () => {
  // 恢复滚动
});

标签: 图片js
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

H5图片实现地图

H5图片实现地图

实现H5图片地图的方法 在H5中实现图片地图功能,可以通过以下方式完成。图片地图允许用户在图片的特定区域点击,触发不同的交互效果。 使用HTML的<map>和<area>标…

react如何添加图片

react如何添加图片

在React中添加图片的方法 使用import导入本地图片 将图片文件放在项目目录中(如src/assets),通过import语句引入后作为src属性值: import logo from '.…

css制作图片

css制作图片

使用CSS创建图片效果 CSS可以通过多种方式实现图片的显示、处理和特效。以下是几种常见的方法: 使用background-image属性 在CSS中可以通过background-image属性将…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(…