Js上下左右无缝隙滚动代码
转载:http://www.cnblogs.com/chenjt/p/4193464.html
主要用到dom.offsetWidth 这个表示实际的宽度。
dom.scrollLeft 这个表示这个容器dom的滚动条的水平偏移.
核心代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>向上下左右不间断无缝滚动图片的效果(兼容火狐和IE)</title>
</head>
<body>
<div id="colee" style="overflow:hidden;height:253px;width:410px;">
<div id="colee1">
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
</div>
<div id="colee2"></div>
</div>
<script>
var speed=;
var colee2=document.getElementById("colee2");
var colee1=document.getElementById("colee1");
var colee=document.getElementById("colee");
colee2.innerHTML=colee1.innerHTML; //克隆colee1为colee2
function Marquee1(){
//当滚动至colee1与colee2交界时
if(colee2.offsetTop-colee.scrollTop<=){
colee.scrollTop-=colee1.offsetHeight; //colee跳到最顶端
}else{
colee.scrollTop++
}
}
var MyMar1=setInterval(Marquee1,speed)//设置定时器
//鼠标移上时清除定时器达到滚动停止的目的
colee.onmouseover=function() {clearInterval(MyMar1)}
//鼠标移开时重设定时器
colee.onmouseout=function(){MyMar1=setInterval(Marquee1,speed)}
</script>
<!--向上滚动代码结束-->
<br>
<div style="height: 100px;background: pink;">这个上下之间的空白,</div>
<!--下面是向下滚动代码-->
<div id="colee_bottom" style="overflow:hidden;height:253px;width:410px;">
<div id="colee_bottom1">
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
<p><img src="http://www.le.com/favicon.ico"></p>
</div>
<div id="colee_bottom2"></div>
</div>
<script>
var speed=;
var colee_bottom2=document.getElementById("colee_bottom2");
var colee_bottom1=document.getElementById("colee_bottom1");
var colee_bottom=document.getElementById("colee_bottom");
colee_bottom2.innerHTML=colee_bottom1.innerHTML
colee_bottom.scrollTop=colee_bottom.scrollHeight
function Marquee2(){
if(colee_bottom1.offsetTop-colee_bottom.scrollTop>=)
colee_bottom.scrollTop+=colee_bottom2.offsetHeight
else{
colee_bottom.scrollTop--
}
}
var MyMar2=setInterval(Marquee2,speed)
colee_bottom.onmouseover=function() {clearInterval(MyMar2)}
colee_bottom.onmouseout=function() {MyMar2=setInterval(Marquee2,speed)}
</script>
<!--向下滚动代码结束-->
<br>
<!--下面是向左滚动代码-->
<div id="colee_left" style="overflow:hidden;width:252px;">
<table cellpadding="" cellspacing="" border="">
<tr><td id="colee_left1" valign="top" align="center">
<table cellpadding="" cellspacing="" border="">
<tr align="center">
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
</tr>
</table>
</td>
<td id="colee_left2" valign="top"></td>
</tr>
</table>
</div>
<script>
//使用div时,请保证colee_left2与colee_left1是在同一行上.
var speed=;//速度数值越大速度越慢
var colee_left2=document.getElementById("colee_left2");
var colee_left1=document.getElementById("colee_left1");
var colee_left=document.getElementById("colee_left");
colee_left2.innerHTML=colee_left1.innerHTML
function Marquee3(){
if(colee_left2.offsetWidth-colee_left.scrollLeft<=){//offsetWidth 是对象的可见宽度
colee_left.scrollLeft-=colee_left1.offsetWidth//scrollWidth 是对象的实际内容的宽,不包边线宽度
}
else{
colee_left.scrollLeft++;
console.log("colee_left.scrollLeft"+colee_left.scrollLeft);
}
}
var MyMar3=setInterval(Marquee3,speed)
colee_left.onmouseover=function() {clearInterval(MyMar3)}
colee_left.onmouseout=function() {MyMar3=setInterval(Marquee3,speed)}
</script>
<!--向左滚动代码结束-->
<br>
<!--下面是向右滚动代码-->
<div id="colee_right" style="overflow:hidden;width:252px;">
<table cellpadding="" cellspacing="" border="">
<tr><td id="colee_right1" valign="top" align="center">
<table cellpadding="" cellspacing="" border="">
<tr align="center">
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
<td><p><img src="http://www.le.com/favicon.ico"></p></td>
</tr>
</table>
</td>
<td id="colee_right2" valign="top"></td>
</tr>
</table>
</div>
<script>
var speed=;//速度数值越大速度越慢
var colee_right2=document.getElementById("colee_right2");
var colee_right1=document.getElementById("colee_right1");
var colee_right=document.getElementById("colee_right");
colee_right2.innerHTML=colee_right1.innerHTML
function Marquee4(){
if(colee_right.scrollLeft<=)
colee_right.scrollLeft+=colee_right2.offsetWidth
else{
colee_right.scrollLeft--
}
}
var MyMar4=setInterval(Marquee4,speed)
colee_right.onmouseover=function() {clearInterval(MyMar4)}
colee_right.onmouseout=function() {MyMar4=setInterval(Marquee4,speed)}
</script>
<!--向右滚动代码结束-->
</body>
</html>
我自己写的发现向上没有使用offsetTop也行,反正原理都是等scrollTop和第一个的位移一样的时候,把scrollTop=0就行。
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
*{margin:0;padding: 0}
#yan>div>div{
display: inline-block;
}
#yan ul li {
display: inline-block;
}
</style>
</head>
<body>
<div id="yan" style="width:320px; overflow: hidden;">
<div style="width:644px; ">
<div id="yan1">
<ul>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
</ul>
</div>
<div id="yan2">
</div>
</div>
</div>
<hr/>
<div id="shang" style="height:306px; overflow-y: hidden;">
<div style="height:612px; ">
<div id="shang1">
<ul>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
<li><img src="http://www.le.com/favicon.ico"></li>
</ul>
</div>
<div id="shang2">
</div>
</div>
</div> <script type="text/javascript">
var box1 = document.querySelector("#yan1");
var box2 = document.querySelector("#yan2");
var box = document.querySelector("#yan");
box2.innerHTML = box1.innerHTML;
//向左
function left(){
if(box2.offsetWidth - box.scrollLeft <=0){
box.scrollLeft -= box1.offsetWidth;
}else{
box.scrollLeft++;
}
}
//向右
function right(){
if(box.scrollLeft <=0){
box.scrollLeft += box1.offsetWidth;
}else{
box.scrollLeft--;
}
} //向上
/*function top(){
if(box.scrollLeft <=0){
box.scrollLeft += box1.offsetWidth;
}else{
box.scrollLeft--;
}
}*/ var shang1 = document.querySelector("#shang1");
var shang2 = document.querySelector("#shang2");
var shang = document.querySelector("#shang");
shang2.innerHTML = shang1.innerHTML;
shang.scrollTop = shang1.offsetHeight;
//向下
function down(){
if(shang.scrollTop <=0){
shang.scrollTop+= shang1.offsetHeight;
}else{
shang.scrollTop--;
}
}
//向上
function up(){
if(shang1.offsetHeight - shang.scrollTop <=0){
shang.scrollTop -= shang1.offsetHeight;
}else{
shang.scrollTop++;
}
}
setInterval(up,20); </script>
</body>
</html>
这里我们需要知道offsetTop offsetHeight scrollTop的区别
1、scrollTop:https://developer.mozilla.org/en-US/docs/DOM/element.scrollTop
比较容易理解,一个可读写的属性
1)element.scrollTop 返回该元素当前垂直滚动的距离,比如100(无单位)
2)element.scrollTop = 100 将该元素垂直滚动的距离设置为100,注意100为绝对值,而不是相对值。比如当前元素垂直滚动距离 element.scrollTop = 200,则设置完后,该元素垂直滚动的距离为100,而不是100+200
2、offsetTop:https://developer.mozilla.org/en-US/docs/DOM/element.offsetTop
返回该元素相对于其offsetParent顶部的距离,至于offsetParent,指的是距离该元素最近的定位元素,如下所示
<div id="p"><a> <span id="c"></span> </a></div>, P为C的offsetParent,offsetTop则为C距离P顶部的距离
这里有一个写的比较简单的例子:
<<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
#marquee {
position: relative;
height: 300px;
width: 200px;
overflow: hidden;
border: 10px solid #369;
padding:0;
margin:0;
}
#marquee img {
display: block;
}
#marquee dd {
margin: 0px;
padding: 0px;
}
</style>
</head>
<body>
<dl id="marquee">
<dt>
<img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_s017.jpg" alt="无缝滚动" />
<img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_s018.jpg" alt="无缝滚动" />
<img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_s019.jpg" alt="无缝滚动" />
<img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_s020.jpg" alt="无缝滚动" />
<img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_s021.jpg" alt="无缝滚动" />
<img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_s022.jpg" alt="无缝滚动" />
<img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_s023.jpg" alt="无缝滚动" />
</dt>
<dd>
</dd>
</dl>
<script type="text/javascript">
var Marquee = function (id) {
var container = document.getElementById(id),
original = container.getElementsByTagName("dt")[0],
clone = container.getElementsByTagName("dd")[0],
speed = arguments[1] || 10;
clone.innerHTML = original.innerHTML; alert(container.scrollTop);
var rolling = function () {
if (container.scrollTop == clone.offsetTop) {
//我现在纠结的就是container.scrollTop和clone.offsetTop的区别
// 为什么clone.offsetTop是1050,而外面的container.scrollTop却是0 container.scrollTop = 0;
} else {
container.scrollTop++;
}
}
var timer = setInterval(rolling, speed)
container.onmouseover = function () { clearInterval(timer) }
container.onmouseout = function () { timer = setInterval(rolling, speed) }
}
window.onload = function () {
Marquee("marquee");
}
</script> </body>
</html>
Js上下左右无缝隙滚动代码的更多相关文章
- javascript-图片横向无缝隙滚动(可在服务器运行)
前两次弄'图片横向滚动'javascript,在本地上运行得很美,可是一上到我们学校后台的服务器,就有很多问题,这个算是行的了. css代码: <style type="text/cs ...
- marquee上下左右循环无缝滚动代码
一.横向滚动<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN "><HTML>< ...
- javascript-图片横向无缝隙滚动
<style type="text/css"> <!-- ul,li,div{margin:0; padding:0; font-size:12px;} #dem ...
- js文字向上滚动代码
js文字向上滚动代码 <style>.pczt_pingfen_jhxs_news1{ width:397px; background:#edfafd; padding-top:2px; ...
- HTML滚动字幕代码参数详解及Js间隔滚动代码
html文字滚动代码 <marquee style="WIDTH: 388px; HEIGHT: 200px" scrollamount="2" dire ...
- JavaScript js无间断滚动效果 scrollLeft方法 使用模板
JavaScript js无间断滚动效果 scrollLeft方法 使用模板 <!DOCTYPE HTML><html><head><meta charset ...
- DIV+CSS+JS实现图片<ul><li></li></ul>无缝滚动代码
(含上下左右滚动代码) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...
- js无间隙滚动
代码一: ; //设置文字滚动速度 dome2.innerHTML=dome1.innerHTML //复制dome1为dome2 function Marquee(){ ) //当滚动至dome1与 ...
- 今天代码中接触到了一个新的东西。js的上下自动滚动,无缝对接。
js的上下自动滚动,无缝对接.为什么会用到这个东西呢?因为我在做公司的官网项目的修改的时候.有一个产品介绍的页面,会有很多的产品出现在,中间部分的列表里.但是又不能够使用分页.所以我就在想如果,列表数 ...
随机推荐
- python web框架 django wsgi 理论
django wsgi python有个自带的wsgi模块 可以写自定义web框架 用wsgi在内部创建socket对象就可以了 自己只写处理函数就可以了django只是web框架 他也不负责写soc ...
- python web框架 MVC MTV
WEB框架 MVC Model View Controller 数据库 模板文件 业务处理 MTV Model Template View 数据库 模板文件 业务处理
- PAT 1110 Complete Binary Tree[比较]
1110 Complete Binary Tree (25 分) Given a tree, you are supposed to tell if it is a complete binary t ...
- 编辑器——sublime
在这里只介绍自己经常使用的编辑器sublime 第一:安装node插件[出处:http://www.bubuko.com/infodetail-798008.html] 1.下载Nodejs插件,下载 ...
- Font: a C++ class
Font: a C++ class This class is used in Fractal Generator. Avi Examples The header fileFon ...
- Druid出现DruidDataSource - recyle error - recyle error java.lang.InterruptedException: null异常排查与解决
一.问题回顾 线上的代码之前运行的都很平稳,突然就出现了一个很奇怪的问题,看错误信息是第三方框架Druid报出来了,连接池回收连接时出现的问题. 2018-05-14 20:01:32.810 ERR ...
- vue父子组件传值加例子
例子:http://element-cn.eleme.io/#/zh-CN/component/form 上进行改的 父传子:用prop:子组件能够改变父组件的值,是共享的,和父操作是 ...
- ElasticSearch recovery过程源码分析
[ES版本] 5.5.0 [分析过程] 找到Recovery有6种状态 public class RecoveryState implements ToXContent, Streamable { p ...
- (译)Windows Azure:移动后端开发的主要更新
Windows Azure:移动后端开发的主要更新 这周我们给Windows Azure释出了一些很棒的更新,让云上的移动应用开发明显的简单了.这 些新功能包括: 移动服务:定制API支持移动服务:G ...
- 浅谈boost.variant的几种访问方式
前言 variant类型在C++14并没有加入,在cppreference网站上可以看到该类型将会在C++17加入,若想在不支持C++17的编译器上使用variant类型,我们可以通过boost的va ...