javascript:文字不间断向左移动的实例代码


Posted in Javascript onAugust 08, 2013
<!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> 
<script type="text/javascript"><!-- 
//主要的滚动函数 
//如果滚动的效果正好是需要的效果 
//那么你只需要直接调用这个函数即可 
var moveTag=function(obj){ 
var _this = this; 
_this.speed = 10;//移动的速度 
_this.space = 10 * _this.speed;//移动间隔的时间 
obj.scrollLeft=0;//初始化滚动的位置(主要是考虑到需要兼容FF) 
var divList = obj.getElementsByTagName("DIV"); 
var obj2 = new Object();//包含所有滚动列的div 
for(var i=0;i<divList.length;i++){ 
if(divList[i].parentNode==obj){ 
obj2=divList[i]; 
break; 
} 
} 
//得到需要滚动的所有列 
//divList循环两次的目的是为了不让样式名称影响滚动代码 
//也就是尽可能的减少滚动代码与样式名称的耦合 
var cellCount = 0; 
_this.cellList = new Array(); 
for(var i=0;i<divList.length;i++){ 
if(divList[i].parentNode==obj2){ 
cellCount++; 
_this.cellList.push(divList[i]);//需要滚动的所有列 
} 
} 
_this.resetCellList=function(){ 
//这个函数主要是为了让滚动不间断 
//在每次滚动到终点的时候需要使用 
//将已经滚动过的列移到当前列之后 
for(var i=0;i<_this.cellList.length-1;i++){ 
obj2.removeChild(_this.cellList[i]); 
obj2.appendChild(_this.cellList[i]); 
} 
//重新获取_this.cellList 
_this.cellList = new Array(); 
for(var i=0;i<divList.length;i++){ 
if(divList[i].parentNode==obj2) _this.cellList.push(divList[i]); 
} 
//alert(_this.cellList.length); 
} 
_this.resetForMoveRight=function(){ 
//这个函数主要是为了让滚动不间断 
//与resetCellList的区别是这个函数是为了向右不间断滚动使用的 
//在每次滚动到起点的时候需要使用 
//将当前列之后的所有列移动到当前列之前 
if(_this.cellList.length>0){ 
for(var i=_this.cellList.length-1;i>0;i--){ 
obj2.removeChild(_this.cellList[i]); 
obj2.insertBefore(_this.cellList[i],obj2.childNodes[0]); 
} 
} 
//重新获取_this.cellList 
_this.cellList = new Array(); 
for(var i=0;i<divList.length;i++){ 
if(divList[i].parentNode==obj2) _this.cellList.push(divList[i]); 
} 
//alert(_this.cellList.length); 
} 
//alert(_this.cellList.length); 
obj2.style.width = parseInt(obj.offsetWidth * cellCount) + "px"; 
// 
//alert(_this.endScroll); 
var cellScroll = obj.offsetWidth;//每次滚动需要滚动多少距离 
var endScroll = obj2.offsetWidth - cellScroll;//计算滚动条的终点位置 
//alert(_this.cellScroll); 
// 
_this.moveLength = cellScroll;//初始化移动偏量,为0的时候,在页面加载完毕之后将会立即移动;等于_this.cellScroll表示延迟一会再开始执行 
_this.scrollEnd = false; 
_this.scrollTimes = 0; 
//休息一会儿 
_this.sleep=function(){ 
_this.scrollTimes++; 
if(_this.scrollTimes>=_this.space){ 
_this.scrollTimes=0; 
_this.moveLength=0; 
} 
}; 
_this.moveStart = true;//是否开始移动 
_this.isMoveLeft = true;//是否向左移动 
_this.move=function(){ 
obj.onmouseover=function(){ 
_this.moveStart=false; 
}; 
obj.onmouseout=function(){ 
_this.moveStart=true; 
}; 
//重新设定cellList 
if(obj.scrollLeft>=endScroll && _this.isMoveLeft){//向左移动,并且已经移动到尽头 
if(_this.moveLength > 0) _this.moveLength = cellScroll;//调整 
if(_this.cellList.length>0){ 
_this.resetCellList();//更新cellList 
obj.scrollLeft=0; 
}else{ 
_this.scrollEnd = true; 
} 
}else if(obj.scrollLeft<=0 && !_this.isMoveLeft){//向右移动,并且已经移动到尽头 
if(_this.moveLength > 0) _this.moveLength = cellScroll;//调整 
if(_this.cellList.length>0){ 
_this.resetForMoveRight();//更新cellList 
obj.scrollLeft=endScroll; 
}else{ 
_this.scrollEnd = false; 
} 
} 
// 
if(_this.scrollEnd){//向左移动 
if(_this.moveLength<cellScroll && _this.moveStart){ 
obj.scrollLeft--; 
_this.moveLength++; 
}else if(_this.moveLength>=cellScroll){ 
_this.sleep(); 
} 
} 
else{//向右移动 
if(_this.moveLength<cellScroll && _this.moveStart){ 
obj.scrollLeft++; 
_this.moveLength++; 
}else if(_this.moveLength>=cellScroll){ 
_this.sleep(); 
} 
} 
}; 
//自动 
_this.start=function(){ 
setInterval(_this.move,_this.speed); 
}; 
//右移动 
_this.moveRight=function(){ 
_this.scrollEnd = true;//已经滚动到尽头 
_this.isMoveLeft = false;//向右滚动 
_this.scrollTimes=0; 
}; 
//左移动 
_this.moveLeft=function(){ 
_this.scrollEnd = false;//没有滚动到尽头 
_this.isMoveLeft = true;//向左滚动 
_this.scrollTimes=0; 
}; 
}; 
// --></script> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<style><!-- 
#list{border:#ccc 1px solid;} 
#list div div{line-height:30px;text-align:center;border-right:#ccc 1px solid;} 
#list{width:150px;height:30px;overflow:hidden;}/*必须的属性,宽度、高度可以自定义*/ 
#list div div{width:150px;height:30px;float:left;}/*必须的属性,宽度、高度最好与#list的定义一样*/ 
--></style><style mce_bogus="1">#list{border:#ccc 1px solid;} 
#list div div{line-height:30px;text-align:center;border-right:#ccc 1px solid;} 
#list{width:150px;height:30px;overflow:hidden;}/*必须的属性,宽度、高度可以自定义*/ 
#list div div{width:150px;height:30px;float:left;}/*必须的属性,宽度、高度最好与#list的定义一样*/</style> 
<title>无标题文档</title> 
</head> 
<body> 
<div id="list"> 
<div> 
<div>第一列</div> 
<div>第二列</div> 
<div>第三列</div> 
<div>第四列</div> 
<div>第五列</div> 
</div> 
</div> 
<a href="javascript:moveLeft()" mce_href="javascript:moveLeft()">左移动</a> 
<a href="javascript:moveRight()" mce_href="javascript:moveRight()">右移动</a> 
<script type="text/javascript"><!-- 
var move=new moveTag(document.getElementById("list")); 
move.start(); 
move.speed=10;//滚动的速度,默认为10 
//move.space=0;//滚动间隔时间,默认为滚动速度 * 16 
//左移动只能移动到最左边,无法一直向左移 
//为了使滚动没有间断,所以最左边的坐标是不断变化的 
//move.moveLeft();//这样可以设置默认自右向左移动 
//move.moveRight();//与move.moveLeft()反方向 
var moveLeft=move.moveLeft; 
var moveRight=move.moveRight; 
//想要一个页面上有N个地方滚动? 
//没问题!只需要多new几个实例即可实现 
// --></script> 
</body> 
</html>
Javascript 相关文章推荐
Extjs中ComboBox加载并赋初值的实现方法
Mar 22 Javascript
js去除重复字符串两种实现方法
Jan 09 Javascript
IE中图片的onload事件无效问题和解决方法
Jun 06 Javascript
前端设计师们最常用的JS代码汇总
Sep 25 Javascript
浅谈react.js 之 批量添加与删除功能
Apr 17 Javascript
Vue组件化通讯的实例代码
Jun 23 Javascript
详解webpack3如何正确引用并使用jQuery库
Aug 26 jQuery
JavaScript实现全选取消效果
Dec 14 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
Nov 20 Javascript
详解Vue 如何监听Array的变化
Jun 06 Javascript
通过循环优化 JavaScript 程序
Jun 24 Javascript
vue.js的状态管理vuex中store的使用详解
Nov 08 Javascript
js获得地址栏?问号后参数的方法
Aug 08 #Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
Aug 07 #Javascript
js动态创建、删除表格示例代码
Aug 07 #Javascript
关于extjs4如何获取grid修改后的数据的问题
Aug 07 #Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
Aug 07 #Javascript
js使浏览器窗口最大化实现代码(适用于IE)
Aug 07 #Javascript
javascript一元操作符(递增、递减)使用示例
Aug 07 #Javascript
You might like
一个简易需要注册的留言版程序
2006/10/09 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
浅谈Python peewee 使用经验
2017/10/20 Python
django中静态文件配置static的方法
2018/05/20 Python
python爬取个性签名的方法
2018/06/17 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
HTML5之消息通知的使用(Web Notification)
2018/10/30 HTML / CSS
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
阿迪达斯越南官网:adidas越南
2020/07/19 全球购物
学生打架检讨书大全
2014/01/23 职场文书
《影子》教学反思
2014/02/21 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
监守自盗观后感
2015/06/10 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
最新最全的手机号验证正则表达式
2022/02/24 Javascript
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS