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 相关文章推荐
侧栏跟随滚动的简单实现代码
Mar 18 Javascript
JavaScript中的无阻塞加载性能优化方案
Oct 10 Javascript
JS对大量数据进行多重过滤的方法
Nov 04 Javascript
Bootstrap源码学习笔记之bootstrap进度条
Dec 24 Javascript
安装Node.js并启动本地服务的操作教程
May 12 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
Sep 15 Javascript
Vue源码解析之数据响应系统的使用
Apr 24 Javascript
解决layui checkbox 提交多个值的问题
Sep 02 Javascript
详解Typescript 内置的模块导入兼容方式
May 31 Javascript
vue中template的三种写法示例
Oct 21 Javascript
详解JavaScript之Array.reduce源码解读
Nov 01 Javascript
详解React中共享组件逻辑的三种方式
Feb 02 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
php下载远程文件类(支持断点续传)
2008/11/14 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
php实现连接access数据库并转txt写入的方法
2017/02/08 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
jQuery Ajax文件上传(php)
2009/06/16 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
python实现手机通讯录搜索功能
2018/02/22 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
python中upper是做什么用的
2020/07/20 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
应聘自荐书
2013/10/08 职场文书
教师自我鉴定
2013/12/13 职场文书
自我评价如何写好?
2014/01/05 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
高中语文教学反思
2014/01/16 职场文书
卫生巾广告词
2014/03/18 职场文书
大学生党员自我评价范文
2014/04/09 职场文书
办公室岗位职责
2015/02/04 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
担保书范文
2019/07/09 职场文书
详解Python requests模块
2021/06/21 Python