转载: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上下左右无缝隙滚动代码的更多相关文章

  1. javascript-图片横向无缝隙滚动(可在服务器运行)

    前两次弄'图片横向滚动'javascript,在本地上运行得很美,可是一上到我们学校后台的服务器,就有很多问题,这个算是行的了. css代码: <style type="text/cs ...

  2. marquee上下左右循环无缝滚动代码

    一.横向滚动<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN "><HTML>< ...

  3. javascript-图片横向无缝隙滚动

    <style type="text/css"> <!-- ul,li,div{margin:0; padding:0; font-size:12px;} #dem ...

  4. js文字向上滚动代码

    js文字向上滚动代码 <style>.pczt_pingfen_jhxs_news1{ width:397px;  background:#edfafd; padding-top:2px; ...

  5. HTML滚动字幕代码参数详解及Js间隔滚动代码

    html文字滚动代码 <marquee style="WIDTH: 388px; HEIGHT: 200px" scrollamount="2" dire ...

  6. JavaScript js无间断滚动效果 scrollLeft方法 使用模板

    JavaScript js无间断滚动效果 scrollLeft方法 使用模板 <!DOCTYPE HTML><html><head><meta charset ...

  7. DIV+CSS+JS实现图片<ul><li></li></ul>无缝滚动代码

    (含上下左右滚动代码) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  8. js无间隙滚动

    代码一: ; //设置文字滚动速度 dome2.innerHTML=dome1.innerHTML //复制dome1为dome2 function Marquee(){ ) //当滚动至dome1与 ...

  9. 今天代码中接触到了一个新的东西。js的上下自动滚动,无缝对接。

    js的上下自动滚动,无缝对接.为什么会用到这个东西呢?因为我在做公司的官网项目的修改的时候.有一个产品介绍的页面,会有很多的产品出现在,中间部分的列表里.但是又不能够使用分页.所以我就在想如果,列表数 ...

随机推荐

  1. oracle入门(7)——存储过程

    [本文介绍] 熟悉了PL/SQL语法后,实现java调用oracle存储过程才是主要目的.本文将介绍如何写存储过程,java如何调用存储过程. [存储过程介绍] 抛开专业的描述,存储过程就是在数据库里 ...

  2. abap 开发之创建表维护生成器

    在sap开发中有时需要对一些自建表维护数据,但又不想写程序,怎么办呢??这个时候我们可以直接生成个表维护生成器,为其定义一个事物码就ok了.以下是表格维护生成器的生成步骤. 首先我们需要先定义表.输入 ...

  3. Loadrunner中参数化取值方式分析

    Loadrunner中参数化取值依赖两个维度: 1.取值顺序分为“顺序”“随机”“唯一”.    select next row:Sequential , Random,unique 2.更新值时分为 ...

  4. 安装CentOS 7 文字版

    下载镜像 http://mirrors.163.com/ CentOS 7.4 http://mirrors.163.com/centos/7.4.1708/isos/x86_64/ 选择 CentO ...

  5. mysql数据库从删库到跑路之mysql数据类型

    一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/mysql/mysql-data ...

  6. CGlib和JDK动态代理

    一.CGlib动态代理     JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢,这就需要CGLib了.CGLib采用了非常底层的1:字节码技术,其原理是通过字节 ...

  7. sidekiq安装及使用

    参考:https://github.com/mperham/sidekiq/wiki/Getting-Started https://wdxtub.com/2016/07/06/sidekiq-gui ...

  8. php的正则表达式完全手册

    前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感.只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正则表达式不是问题. 索引 1._引子 2. ...

  9. Oracle Union Union All 对查询结果集操作

    在Oracle中提供了三种类型的集合操作: 并(UNION).交(INTERSECT).差(MINUS) Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union Al ...

  10. 【android】使用RecyclerView和CardView,实现知乎日报精致布局

    完整代码,请参考我的博客园客户端,git地址:http://git.oschina.net/yso/CNBlogs 在写博客园客户端的时候,突然想到,弄个知乎日报风格的简单清爽多好!不需要那么多繁杂的 ...