Board logo

标题: javascript实现的自下而上的滚动文字效果 [打印本页]

作者: fangzhen    时间: 2008-11-12 13:25     标题: javascript实现的自下而上的滚动文字效果

最简单的滚动就是marquee,不过它效果不太好看,没有加速和停留的过程。
下面这段就是我常用的,效果很好,是从淘宝上取下的,经过我修改了一点点。

<style type="text/css">
#IssueList {
margin:0px 0px;
padding: 0;
list-style: none;
height: 20px;
width:100px;
overflow:hidden;
background-color:#336699;
color:#FFFFFF;
}
#IssueList li {
font-size:13px;
line-height: 20px;
}
</style>
<!--这个ul里面放要滚动的内容,由动态服务器端语言很好实现-->
<ul id="IssueList">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ul>
<script type="text/javascript">
(function(ul, delay, speed, lineHeight) {
var slideBox = (typeof ul == 'string')?document.getElementById(ul):ul;
var delay = delay||1000;
var speed=speed||20;
var lineHeight = lineHeight||20;
var tid = null, pause = false;
var start = function() {
tid=setInterval(slide, speed);
}
var slide = function() {
if (pause) return;
slideBox.scrollTop += 2;
if (slideBox.scrollTop % lineHeight == 0) {
clearInterval(tid);
slideBox.appendChild(slideBox.getElementsByTagName('li')[0]);
slideBox.scrollTop = 0;
setTimeout(start, delay);
}
}
slideBox.onmouseover=function(){pause=true;}
slideBox.onmouseout=function(){pause=false;}
setTimeout(start, 2000);
})('IssueList', 1000, 2, 20);//停留时间,相对速度(越小越快),每次滚动多少,最好和Li的Line-height一致。
</script>
作者: fangzhen    时间: 2008-11-12 13:26

注:不支持火狐浏览器
我想大家都看过各种各样的滚动(最常用的就是用在新闻的更新上面),一般情况下只要不是图片,都是用HTML本身就有提供一个很不错的滚动标记??marquee来完成的(用JS也可以同样实现这种效果);当然并不是说图片就不能那样做。
  以下为marquee的一些基本的参数:
  该标记语法格式如下:
<marquee
aligh=left|center|right|top|bottom
bgcolor=#n
direction=left|right|up|down
behavior=type
height=n
hspace=n
scrollamount=n
Scrolldelay=n
width=n
VSpace=n
loop=n>内容</marquee>

  下面解释一下各参数的含义:
  align:是设定活动字幕的位置,除了居左、居中、居右三种位置外,又增加靠上(top)和靠下(bottom)两种位置。
  Bgcolor:用于设定活动字幕的背景颜色,可以使用英文的单词也可以是十六进制数的。
  Direction:用于设定活动字幕的滚动方向是向左(left)、向右(right)、向上(up)、向下(down)。
  Behavior:用于设定滚动的方式,主要由三种方式:
behavior="scroll"表示由一端滚动到另一端;
behavior="slide":表示由一端快速滑动到另一端,且不再重复;
behavior="alternate"表示在两端之间来回滚动。
  Height:用于设定滚动字幕的高度。
  Width:则设定滚动字幕的宽度。
  Hspace和vspace:分别用于设定滚动字幕的左右边框和上下边框的宽度。
  Scrollamount:用于设定活动字幕的滚动距离。数值越小,滚动的速度就越快。
  scrolldelay:用于设定滚动两次之间的延迟时间,数值越小,间隔就越小。
  Loop:用于设定滚动的次数,当loop=-1表示一直滚动下去,直到页面更新。其中默认情况是向左滚动无限次,字幕高度是文本高度;滚动范围:水平滚动的宽度是当前位置的宽度;垂直滚动的高度是当前位置的高度。

  现在要介绍的是一种新型的滚动,利用JS的方法来做字幕的滚动:向上,在中间停顿一到两秒(就像经典的这种):
  将以下代码贴到您要显示的位置就可以了:
<script>
var marqueeContent=new Array(); //定义一个数组,用来存放显示内容
marqueeContent[0]='<A href="#" onclick="reinitMarquee()">刷新最新列表</FONT></A>';
marqueeContent[1]='<a href=updatelist.asp target=_blank>站点最新更新六十条</a>';
marqueeContent[2]='<A href= 875.asp target=_blank>羽毛效果制作教程</a>';
marqueeContent[3]='<A href= 831.asp target=_blank>MySQL&ASP</a>';
marqueeContent[4]='<A href= 874.asp target=_blank>初步了解CSS3</a>';
marqueeContent[5]='<A href= 864.asp target=_blank>Fireworks MX 2004执行面版操作</a>';
marqueeContent[6]='<A href=872.asp target=_blank>Fireworks MX 2004等高渐变填充</a>';
marqueeContent[7]='<A href=873.asp target=_blank>瓶子里的花</a>';
marqueeContent[8]='<A href=871.asp target=_blank>Fireworks MX 实现选项卡式效果</a>';
marqueeContent[9]='<A href=870.asp target=_blank>情侣:黑白的爱情空气</a>';
marqueeContent[10]='<A href=866.asp target=_blank>制作 MAC 风格的苹果标志</a>';
marqueeContent[11]='<A href=868.asp target=_blank>蛋壳制作及破壳而出的人物合成</a>';

var marqueeInterval=new Array(); //定义一些常用而且要经常用到的变量
var marqueeId=0;
var marqueeDelay=4000;
var marqueeHeight=16;

//接下来的是定义一些要使用到的函数
Array.prototype.random=function() {
var a=this;
var l=a.length;
for(var i=0;i<l;i++) {
var r=Math.floor(Math.random()*(l-i));
a=a.slice(0,r).concat(a.slice(r+1)).concat(a[r]);
}
return a;
}
function initMarquee() {
marqueeContent=marqueeContent.random();
var str='';
for(var i=0;i<Math.min(3,marqueeContent.length);i++) str+=(i>0?'  ':'')+marqueeContent;
document.write('<div id=marqueeBox style="overflow:hidden;height:'+marqueeHeight+'px" onmouseover="clearInterval(marqueeInterval[0])" onmouseout="marqueeInterval[0]=setInterval(\'startMarquee()\',marqueeDelay)"><div>'+str+'</div></div>');
marqueeId+=2;
if(marqueeContent.length>3)marqueeInterval[0]=setInterval("startMarquee()",marqueeDelay);
}
function reinitMarquee() {
js_scroll_content.src='scroll_content2.js';
marqueeContent=marqueeContent.random();
var str='';
for(var i=0;i<Math.min(3,marqueeContent.length);i++) str+=(i>0?'  ':'')+marqueeContent;
marqueeBox.childNodes[(marqueeBox.childNodes.length==1?0:1)].innerHTML=str;
marqueeId=2;
}
function startMarquee() {
var str='';
for(var i=0;(i<3)&&(marqueeId+i<marqueeContent.length);i++) {
str+=(i>0?'  ':'')+marqueeContent[marqueeId+i];
}
marqueeId+=3;
if(marqueeId>marqueeContent.length)marqueeId=0;

if(marqueeBox.childNodes.length==1) {
var nextLine=document.createElement('DIV');
nextLine.innerHTML=str;
marqueeBox.appendChild(nextLine);
}
else {
marqueeBox.childNodes[0].innerHTML=str;
marqueeBox.appendChild(marqueeBox.childNodes[0]);
marqueeBox.scrollTop=0;
}
clearInterval(marqueeInterval[1]);
marqueeInterval[1]=setInterval("scrollMarquee()",20);
}
function scrollMarquee() {
marqueeBox.scrollTop++;
if(marqueeBox.scrollTop%marqueeHeight==(marqueeHeight-1)){
clearInterval(marqueeInterval[1]);
}
}
initMarquee();
</script>




欢迎光临 PHP开发笔记 (http://phpvi.com/) Powered by Discuz! 6.1.0