JS实现的N多简单无缝滚动代码(包含图文效果)


Posted in Javascript onNovember 06, 2015

本文实例讲述了JS实现的N多简单无缝滚动代码。分享给大家供大家参考,具体如下:

实现原理很简单,注册事件之后,立即将元素的innerHTML累加一次。

接着滚动开始,当滚动条到达元素的中间位置时:

不要在子元素上设置margin和padding,因为CSS对margin或padding的叠加机制,会导致滚动出现“跳跃”。稳妥的办法是套一个内联元素,然后再在里面设置margin或者padding!

运行效果截图如下:

JS实现的N多简单无缝滚动代码(包含图文效果)

在线演示地址如下:

具体代码如下:

<!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" />
<style type="text/css">
body{width:80%;margin:0 auto;color:#00a;}
h2{font-size:120%;margin:1em auto;text-align:center;}
div{border:solid 1px #0a0;font-size:12px;overflow:hidden;width:500px;margin:1em auto;}
p{padding:0;margin:0;}
p span{display:inline-block;margin:1em;}
p b{margin:1em .5em;display:inline-block;font-size:120%;color:red;}
.tips{border:solid 1px red;background:#FFC;padding:.5em;}
</style>
<title>无缝滚动</title>
</head>
<body>
<h1>较简单的无缝滚动实现办法</h1>
<p class="tips">切记:不要在子元素上设置margin和padding,因为CSS对margin或padding的叠加机制,会导致滚动出现“跳跃”。稳妥的办法是套一个内联元素,然后再在里面设置margin或者padding!为什么滚动到一半就跳转到顶部了呢?因为obj.innerHTML=obj.innerHTML+obj.innerHTML,它迷惑了你。。。。</p>
<h2>第一个,设置非标准属性delay,所以要快些</h2>
<div class="seamless" style="height:100px;" id="obj" delay="10">
 <p><span>蓝色理想维基是一个以蓝色理想社区 用户为基础的维基系统。 只要是社区的用户,并达到初级用户级别,就能对本站的页面进行增加和编辑。</span></p>
 <p><span>我们目前使用这套系统来完成我们网站的各项帮助。比如论坛怎么使用,怎么找回密码一类的问题。另外还用来记录一些网站,会员的各项历史信息。</span></p>
 <p><span>长期的打算是解决社区的技术版块中重复提出的基础问题。因为论坛回复很不规范,需要用户自己从回复中整理和测试,另外很容易被帖子内容淹没,没有有效地进行整理和规范。</span></p>
 <p><span>我们想利用高素质的网站会员在HTML方面的专业知识,来完成一个协作的WEB知识库,造福大众。</span></p>
 <p><span>蓝色理想维基标识设计师是:bobpop,标识版权属于支付宝。</span></p>
</div>
<h2>第二个,如果未设置delay,则默认100毫秒的频率滚动</h2>
<div class="seamless" style="height:50px;">
 <p><span>缺陷:不能对子标签设置margin或者padding。</span></p>
 <p><span>怎么办呢?跟上面一样,里面套一个span标签,然后就可以设置margin,padding了。</span></p>
 <p><span>算是一个缺点吧。</span></p>
</div>
<h2>第三个,可以停止的,因为class="seamless <strong style="color:red;">allowStop</strong>"</h2>
<div class="seamless allowStop" style="height:90px;width:150px;" delay="9">
 <p><span><img src="images/frown.gif" width="50" /></span></p>
 <p><span><img src="images/redface.gif" /></span></p>
 <p><span><img src="images/biggrin.gif" width="90" /></span></p>
 <p><span><img src="images/wink.gif" width="120" /></span></p>
 <p><span><img src="images/tongue.gif" width="40" /></span></p>
 <p><span><img src="images/cool.gif" align="right" height="40" /></span></p>
 <p><span><img src="images/rolleyes.gif" width="70" /></span></p>
 <p><span><img src="images/confused.gif" /></span></p>
 <p><span><img src="images/han.gif" /></span></p>
</div>
</body>
</html>
<script type="text/javascript">
(function(c){
 var obj=document.getElementsByTagName("div");
 var _l=obj.length;
 var o;
 for(var i=0;i<_l;i++){
  o=obj[i];
  var n2=o.clientHeight;
  var n3=o.scrollHeight;
  o.s=0;
  if(o.className.indexOf(c)>=0){
   if(n3<=n2){return false;}
   var delay=parseInt(o.getAttribute("delay"),10);
   if(isNaN(delay)){delay=100;}
   if(o.className.indexOf("allowStop")>=0){
    o.onmouseover=function(){this.Stop=true;}
    o.onmouseout=function(){this.Stop=false;}
   }
   giveInterval(autoRun,delay,o);
   //关键之处!!
   o.innerHTML=o.innerHTML+o.innerHTML;
  }
 }
 //注册函数
 function giveInterval(funcName,time){var args=[];for(var i=2;i<arguments.length;i++){args.push(arguments[i]);}return window.setInterval(function(){funcName.apply(this,args);},time);}
 function autoRun(o,s){
  if(o.Stop==true){return false;}
  var n1=o.scrollTop;
  var n3=o.scrollHeight;
  o.s++;
  o.scrollTop=o.s;
  if(n1>=n3/2){
   o.scrollTop=0;
   o.s=0;
  }
 }
})('seamless')
</script>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
ExtJS 简介 让你知道extjs是什么
Dec 29 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
Mar 28 Javascript
javascript ES6中箭头函数注意细节小结
Feb 17 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
Mar 02 Javascript
基于es6三点运算符的使用方法(实例讲解)
Oct 12 Javascript
Vue集成Iframe页面的方法示例
Dec 12 Javascript
vue 下列表侧滑操作实例代码详解
Jul 24 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
Sep 27 Javascript
解决element ui select下拉框不回显数据问题的解决
Feb 20 Javascript
微信小程序缓存支持二次开发封装实现解析
Dec 16 Javascript
JS document内容及样式操作完整示例
Jan 14 Javascript
Vue常用的全选/反选的示例代码
Feb 19 Javascript
javascript中的altKey 和 Event属性大全
Nov 06 #Javascript
JS日期加减,日期运算代码
Nov 05 #Javascript
程序员必知35个jQuery 代码片段
Nov 05 #Javascript
js如何实现淡入淡出效果
Nov 18 #Javascript
JavaScript数组去重的五种方法
Nov 05 #Javascript
javascript实现tab切换的两个实例
Nov 05 #Javascript
Javascript中的return作用及javascript return关键字用法详解
Nov 05 #Javascript
You might like
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
php生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
[00:10]DOTA2全国高校联赛 以DOTA2会友
2018/05/30 DOTA
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
用Python实现一个简单的线程池
2015/04/07 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
五水共治一句话承诺
2014/05/30 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers