原生JavaScript实现图片无缝滚动效果

作者:青柠

时间:2026-10-28

浏览:557

本文介绍如何使用原生JavaScript实现网页图片无缝滚动效果。通过操作DOM元素的innerHTML复制内容,利用scrollLeft属性控制滚动位置,并结合setInterval定时器实现自动播放。代码包含CSS样式布局及JS逻辑,支持鼠标悬停暂停、左右箭头点击加速滚动等功能,无需依赖第三方插件。

文章目录

原生JavaScript实现图片无缝滚动效果

在各类网页设计中,图片无缝滚动效果十分常见。虽然市面上有许多现成的插件可供选择,但直接使用原生JavaScript实现这一功能其实非常简单高效。

实现该效果的核心在于掌握JavaScript中的位置定位知识。

1.innerHTML:用于设置或获取元素内部的HTML标签内容。

2.scrollLeft:用于设置或获取对象左边界与窗口目前可见内容最左端之间的距离。

3.offsetWidth:用于设置或获取指定标签的宽度。

4.setInterval():用于设置方法定时启动执行。

5.clearInterval():用于清除已设置的定时器。

以下是该效果的运行示意图:

原生JavaScript实现图片无缝滚动效果

您可以先通过demo预览实际效果。

完整代码实现

具体实现代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>javascript scroll制作</title>
</head>
<body>
<style>
/*conment*/
    *{
margin: 0;
padding: 0;
  }
img{max-width: 100%;}
.container{
max-width: 620px;
margin: 0 auto;
padding-top: 50px;
  }
.text-center{text-align: center;}
.list-inline li{
display: inline-block;
  }
.hide{display: none;}
hr{
margin:20px 0;
  }
.tag{
background-color: #ccc;
padding: 5px 0;
  }
.tag li{
padding: 0 10px;
border-left: 1px solid #fff;
cursor:pointer;
  }
.tag li:first-child{
border-left: transparent;
  }
.tag li.active{
background-color: #ddd;
  }
.scroll{
position: relative;
padding: 10px;
margin-bottom: 20px;
background-color: #ddd;
  }
.wrap{
overflow: hidden;
  }
.content{
min-width: 3000px;
height: 200px;
  }
.content ul{
float: left;
  }
.content ul li{
display: inline-block;
max-width: 200px;
  }
#prev,#next{
width: 50px;
height: 50px;
margin-top: -25px;
background-color: #ccc;
line-height: 50px;
text-align: center;
cursor: pointer;
  }
#prev{
position: absolute;
left: 0;
top:50%;
border-radius: 0 25px 25px 0;
  }
#next{
position: absolute;
right: 0;
top:50%;
border-radius: 25px 0 0 25px;
  }
</style>
<div class="container">
<h1 class="text-center">图片滚动制作</h1>
<hr>
<div class="scroll">
<div class="wrap" id="wrap">
<div id="content" class="content" >
<ul id="list1">
<li> <img src="freelance.gif" alt=""> </li>
<li> <img src="button.gif" alt=""></li>
<li> <img src="load.gif" alt=""></li>
<li> <img src="straw.gif" alt=""></li>
</ul>
<ul id="list2">
</ul>
</div>
</div>
<div id="prev">
prev
</div>
<div id="next">
next
</div>
</div>
</div>
<script>
var wrap=document.getElementById('wrap');
var list1=document.getElementById('list1');
var list2=document.getElementById('list2');
var prev=document.getElementById('prev');
var next=document.getElementById('next');
//创建复制一份内容列表
list2.innerHTML=list1.innerHTML;
//向左循环滚动
function scroll(){
if(wrap.scrollLeft>=list2.offsetWidth){
wrap.scrollLeft=0;
    }
else{
wrap.scrollLeft++;
    }
  }
timer = setInterval(scroll,1);
//鼠标停留使用clearInterval()
wrap.onmouseover=function(){
clearInterval(timer);
  }
wrap.onmouseout=function(){
timer = setInterval(scroll,1);
  }
//向左加速
function scroll_l(){
if(wrap.scrollLeft>=list2.offsetWidth){
wrap.scrollLeft=0;
    }
else{
wrap.scrollLeft++;
    }
  }
//向右滚动
function scroll_r(){
if(wrap.scrollLeft<=0){
wrap.scrollLeft+=list2.offsetWidth;
    }
else{
wrap.scrollLeft--;
    }
  }   
prev.onclick=function(){
clearInterval(timer);
change(0)
  }
next.onclick=function(){
clearInterval(timer);
change(1)
  }
function change(r){
if(r==0){
timer = setInterval(scroll_l,60);
wrap.onmouseout = function(){
timer = setInterval(scroll_l,60);
      }
    }
if(r==1){
timer = setInterval(scroll_r,60);
wrap.onmouseout = function(){
timer = setInterval(scroll_r,60);
      }
    } 
  } 
</script>
</body>

这段代码简洁且实用,开发者可根据具体项目需求进行适当的美化调整。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章