效果:

1.默认缓慢往左滚动

2.放到左箭头上还是向左滚动,放到右箭头上向右滚动

3.放到图片上停止滚动,移出继续滚动

思路:

1.计算图片列表ul的宽度

2.开启定时器,使其向左边距不断增大,造成向左运动的效果

3.图片列表复制一份,向左移动时,当左边距大于一份的宽度时,把它的左边距拉回到0。向右移动时,当左边距大于0时,把它的左边距拉到整个两份图片列表一半的宽度(即一份的宽度)。(拉的瞬间很快,用户察觉不到,造成一种无缝滚动的假象)

4.offsetLeft值的正负决定往哪边移动

5.放到图片上停止这个定时器,移开再开启

window.onload=function(){

var odiv=document.getElementById('div');

var oul=odiv.getElementsByTagName('ul')[0];

var oli=oul.getElementsByTagName('oul');

var btn=document.getElementsByTagName('btn');

var ispeed=-1;

var timer=null;

oul.innerHTML+=oul.innerHTML;   //图片列表复制一份

oul.style.width=oli[0].offsetWidth*oli.length+'px';    //不算出ul的宽度的话,运动过程中后面的会先出现再加载图片,有一种不流畅感,切图片过多会分行,由外面的div决定宽度

timer=setInterval(function(){

oul.style.left=oul.offsetLeft+ispeed+'px';     //offsetLeft输出的是数字不带单位,右边也用oul.style.left输出的是字符串,而不是数值,而且它取得是行间样式,无用

if(oul.offsetLeft<-oul.offsetWidth/2){        //判断时也可以用.style.left或.style.width?(不确定)

oul.style.left=0;

}

else if(oul.offsetLeft>0){

oul.style.left=-oul.offsetWidth/2;

}

),30};

btn[0].onmouseover=function(){

ispeed=-1;

};

btn[1].onmouseover=function(){

ispeed=1;

};

oul.onmouseover=function(){

clearInterval(timer);

};

oul.onmouseout=function(){

timer=setInterval(function(){

oul.style.left=oul.offsetLeft+ispeed+'px';

if(oul.offsetLeft<-oul.offsetWidth/2){

oul.style.left=0;

}

else if(oul.offsetLeft>0){

oul.style.left=-oul.offsetWidth/2;

}

),30};             //如果把速度变大,而定时器的时间也变大是否可以达到相同效果呢?答案是不能。会变成一卡一卡

};

};

注:这样子取得的宽度是不包含margin的,所以图片间边距的写法可以是li的宽度大于img的宽度,li的宽度-img的宽度,就是两边的边距和

[Js]无缝滚动的更多相关文章

  1. 手写JS无缝滚动插件

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  2. js无缝滚动原理及详解[转自刹那芳华]

    刚刚接触JS,网上找了一些关于无缝滚动的教程,但都大同小异,对我这种新手来说也只是会用,不知道什么意思,想要自己写个更是一头雾水.于是找了一些资料,详细说明一下JS无缝滚动的原理,相信看过这篇文章之后 ...

  3. js 无缝滚动效果学习

    <!DOCTYPE html> <html> <head> <title>无缝滚动测试</title> <meta http-equi ...

  4. js无缝滚动跑马灯

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. JS无缝滚动

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #2b7ec3 } p.p2 { margin: 0.0px ...

  6. JS——无缝滚动

    1.描述——无缝滚动图片 2.代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  7. js无缝滚动,不平滑(求高人指点)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  8. 纯js无缝滚动

    HTML代码 <!--父容器要使用overflow: hidden;--> <div id="imgsList" style="height:150px ...

  9. scrollLeft的相关问题(js横向无缝滚动)

    <div id="demo"> <div id="innerdemo"> <div id="demo1"> ...

随机推荐

  1. URLConnection 使用

    统一资源定位符URL(Uniform Resource Locator)是www客户机访问Internet时用来标识资源的名字和地址.超文本链路由统一资源定位符URL维持.URL的格式是: <M ...

  2. poj1556The Doors

    链接 枚举两点 若不和任何线段相交 建边为dis(i,j) floyd求最短路 #include <iostream> #include<cstdio> #include< ...

  3. Java用WebSocket + tail命令实现Web实时日志

    原文:http://blog.csdn.net/xiao__gui/article/details/50041673 在Linux操作系统中,经常需要查看日志文件的实时输出内容,通常会使用tail - ...

  4. Hbase之缓存扫描加快读取速度

    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; impo ...

  5. Element can be click when out of view

    WebDriver can't action the element when out of view Webdriver can't action the element when the elem ...

  6. DI 之 3.3 更多DI的知识(柒)

    3.3.3  自动装配 3.3.4  依赖检查 3.3.5 方法注入

  7. Controller接口

    package org.springframework.web.servlet.mvc; public interface Controller { ModelAndView handleReques ...

  8. C#基础:泛型委托

    泛型委托是委托的一种特殊形式,感觉看上去比较怪异,其实在使用的时候跟委托差不多,不过泛型委托更具有类型通用性. 就拿C#里最常见的委托EventHandler打比方.在.NET 2.0以前,也就是泛型 ...

  9. jq slideUp slideDown

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. jmeter 建立一个JMS点对点测试计划

      确保所需的jar文件在JMeter的 自由 目录中. 如果他们不是,关闭JMeter, 重启JMeter复制jar文件. 看到 开始 获取详细信息.   测试的设置是1与5线程发送4 thread ...