JS滚动模块

function startmarquee(lh,speed,delay,index){ 
	/* 
	函数startmarquee的参数: 
	lh:文字一次向上滚动的距离或高度; 
	speed:滚动速度; 
	delay:滚动停顿的时间间隔; 
	index:可以使封装后的函数应用于页面当中不同的元素; 
	*/ 
	var t; 
	var p=false; 
	var o=document.getElementById("marqueebox"+index);  //获取文档中的滚动区域对象,赋值给变量o; 

        //增加 如果列表内容不能填满对象高度,则不滚动
        if(o.getElementsByTagName("li").length*lh < o.scrollHeight)
            return false;


	o.innerHTML+=o.innerHTML; //对象中的实际内容被复制了一份,包含了两个ul,当然li标签也 
	//由原来的3行,变为6行;复制的目的在于给文字不间断向上滚动提供过渡。 
	o.onmouseover=function(){p=true} 
	//鼠标滑过,停止滚动; 
	o.onmouseout=function(){p=false} 
	//鼠标离开,开始滚动;p是true还是false直接影响到下面start()函数的执行; 
	o.scrollTop = 0; 
	//文字内容顶端与滚动区域顶端的距离,初始值为0; 
	function start(){ 
		t=setInterval(scrolling,speed); //每隔一段时间,setInterval便会执行一次 
		//scrolling函数;speed越大,滚动时间间隔越大,滚动速度越慢; 
		if(!p){ o.scrollTop += 1;} 
		//滚动停止或开始,取决于p传来的布尔值; 
	} 
	function scrolling(){ 
		if(o.scrollTop%lh!=0){ 
			//如果不被整除,即一次上移的高度达不到lh,则内容会继续往上滚动; 
			o.scrollTop += 1; 
			if(o.scrollTop>=o.scrollHeight/2) o.scrollTop = 0; 
			//对象o中的内容之前被复制了一次,所以它的滚动高度,其实是原来内容的两倍高度; 
			//当内容向上滚动到scrollHeight/2的高度时,全部3行文字已经显示了一遍,至此整块内容 
			//scrollTop归0;再等待下一轮的滚动,从而达到文字不间断向上滚动的效果; 
		}else{ 
			clearInterval(t); 
			//否则清除t,暂停滚动 
			setTimeout(start,delay); 
			//经过delay间隔后,启动start() 再连续滚动 
		} 
	} 
	setTimeout(start,delay); 
	//第一次启动滚动;setTimeout会在一定的时间后执行函数start(),且只执行一次 
} 
startmarquee(49, 30, 1000, 1);

转载于:https://my.oschina.net/tanwen/blog/419586

一、遇顶固定的例子 我一直以为是某个div或层随屏幕滚动,遇顶则固定,离开浏览器顶部又还原这样的例子其实不少,其实它的名字叫“层的智能浮动效果”。目前我们在国内的商业网站上就常常看到这样的效果了。例如淘宝网的搜索结果页的排序水平条,在默认状态时,该工具条是跟随页面滚动的,如下图: 而当我们下拉滚动条,随着页面向下滚动,当此工具条接触到浏览器的上边缘时,这时就会独立出来固定在顶部,不跟随页面滚动滚动了,如下图: 类似的例子效果我们在别的网站上都有看到过,例如腾讯微博首页上,当我们下拉屏幕浏览最新微博时,工具条也会出现这个效果,如下图: 这个效果看上去方便,贴心,也许还带推动广告的促销呢。原理其实很简单,本文展示两种方法。 二、智能浮动效果的实现原理 它分两种状态,一是默认状态,二是浮动固顶状态。 默认状态就是默认状态,什么也不用做,保持原有的CSS就好。无论有没有对它做定位,做了absolute也好,没做也好,都行。 关键是当浏览器屏幕滚动时,该对象div层要移除浏览器界面视区的时候,是要修改它的position属性,让它浮动在窗口的上沿显示就行了。最好的position属性是fixed,可以在IE6+和其他浏览器浮动层平滑的固定定位,由于IE6老大哥不支持fixed属性,所以可以另外赋予它absolute属性。当然也会产生副作用——滚动不平滑。不过也无所谓了,在微软公布不再修补更新XP漏洞,在中国360安全卫士的帮助下虽然大家仍然使用XP,但IE的用户已经是少之又少了。 那接下来,如何判断当前div层与浏览器窗口的上边缘接触了呢?遇到浏览器顶部了呢? 当浮动层div与浏览器窗口上边缘接触的一瞬间,其页面垂直偏移值与页面的滚动高度是一致的,所以我们就用这个进行判断。那如何获得页面上元素距离页面的垂直距离呢? 这里则是使用javaScript库实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值