狼Robot

三人行,必有我师。

自己用javascrpt写的像淘宝首页的间隔性滚动的效果

昨天收到一个小功能的需求实现像淘宝首页的间隔性滚动的效果,结果碰到一个小小的问题,想起看过一篇李战老师的悟透javascript,于是在园子里搜到李老师的文章,重新拜读了一遍,但由于本人天资愚昧,还是未能悟出个究竟,不得已,向李老师求救,终于,在李老师的指点下,解决了这个小问题,在这里再次感谢李战老师。
想来想去,先让大家看看效果,再看看有没有看下去的必要吧。

用法很简单:
var scroll = new ScrollText("content","pre","next",true);
第一个参数是滚动区的id,第二个是显示上一条的按钮的id,第三个是显示下一条的按钮的id,第四个是是否直接开始滚动,为false的话后面再scroll.Start()就OK了。
废话不说了,贴代码吧。
我第一次发贴,不懂排版,直接贴了。
ScrollText.js

function ScrollText(content,btnPrevious,btnNext,autoStart)
{
    this.Speed = 10;
    this.Timeout = 1500;
    this.LineHeight = 20;
    this.NextButton = this.$(btnNext);
    this.PreviousButton = this.$(btnPrevious);
    this.ScrollContent = this.$(content);
    this.ScrollContent.innerHTML += this.ScrollContent.innerHTML;
    this.NextButton.onclick = this.GetFunction(this,"Next");
    this.PreviousButton.onclick = this.GetFunction(this,"Previous");
   
    this.NextButton.onmouseover = this.GetFunction(this,"Stop");
    this.NextButton.onmouseout = this.GetFunction(this,"Start");
   
    this.ScrollContent.onmouseover = this.GetFunction(this,"Stop");
    this.ScrollContent.onmouseout = this.GetFunction(this,"Start");
   
    this.PreviousButton.onmouseover = this.GetFunction(this,"Stop");
    this.PreviousButton.onmouseout = this.GetFunction(this,"Start");
    if(autoStart)
    {
        this.Start();
    }
}

ScrollText.prototype.$ = function(element)
{
    return document.getElementById(element);
}

ScrollText.prototype.Previous = function()
{
    clearTimeout(this.AutoScrollTimer);
    clearTimeout(this.ScrollTimer);
    this.Scroll("up");
}

ScrollText.prototype.Next = function()
{
    clearTimeout(this.AutoScrollTimer);
    clearTimeout(this.ScrollTimer);
    this.Scroll("down");
}

ScrollText.prototype.Start = function()
{
    this.AutoScrollTimer = setTimeout(this.GetFunction(this,"AutoScroll"), this.Timeout);
}

ScrollText.prototype.Stop = function()
{
    clearTimeout(this.AutoScrollTimer);
}

ScrollText.prototype.AutoScroll = function()
{
    this.ScrollContent.scrollTop++;
    if(parseInt(this.ScrollContent.scrollTop) % this.LineHeight != 0)
    {
        this.ScrollTimer = setTimeout(this.GetFunction(this,"AutoScroll"), this.Speed);
    }
    else
    {
        if(parseInt(this.ScrollContent.scrollTop) >= parseInt(this.ScrollContent.scrollHeight) / 2)
        {
            this.ScrollContent.scrollTop = 0;
        }
        this.AutoScrollTimer = setTimeout(this.GetFunction(this,"AutoScroll"), this.Timeout);
    }
}

ScrollText.prototype.Scroll = function(direction)
{
    if(direction=="up")
    {
        this.ScrollContent.scrollTop--;
    }
    else
    {
        this.ScrollContent.scrollTop++;
    }
    if(parseInt(this.ScrollContent.scrollTop) >= parseInt(this.ScrollContent.scrollHeight) / 2)
        {
            this.ScrollContent.scrollTop = 0;
        }
    if(parseInt(this.ScrollContent.scrollTop) % this.LineHeight != 0)
    {
        this.ScrollTimer = setTimeout(this.GetFunction(this,"Scroll",direction), this.Speed);
    }
}

ScrollText.prototype.GetFunction = function(variable,method,param)
{
    return function()
    {
        variable[method](param);
    }
}

Demo.Htm

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
    <script language="javascript" type="text/javascript" src="ScrollText.js"></script>
</head>
<body>
<div id="pre" style="width:20px;height:20px;float:left;text-align:center;background-color:#EEEEEE;border:solid 1px #888888;">↑</div>
<div id="content" style="height:20px;line-height:20px;overflow:hidden;float:left;width:120px;border:solid 1px #0000FF;">
hello1........<br>
hello2........<br>
hello3........<br>
hello4........<br>
hello5........<br>
hello6........<br>
hello7........<br>
hello8........<br>
</div>
<div id="next" style="width:20px;height:20px;float:left;text-align:center;background-color:#EEEEEE;border:solid 1px #888888;">↓</div>
<script language="javascript" type="text/javascript">
var scroll = new ScrollText("content","pre","next",true);
</script>
</body>
</html>



功能比较简单,用得着的就拿去吧。 新增加Demo源码下载

posted on 2008-04-08 12:18 狼Robot 阅读(3057) 评论(42)  编辑 收藏 所属分类: JavaScript

评论

#1楼  2008-04-08 12:30 ZH-CN      

FireFox下,undefined~!   回复  引用  查看    

#2楼 [楼主] 2008-04-08 12:32 狼Robot      

哦哦。firefox我没测。   回复  引用  查看    

#3楼 [楼主] 2008-04-08 12:34 狼Robot      

@ZH-CN
测了,代码是可以用的,你不会是说点[查看效果]的按钮提示错误吧?
  回复  引用  查看    

#4楼  2008-04-08 12:47 生鱼片      

支持下   回复  引用  查看    

#5楼  2008-04-08 12:50 留恋星空      

支持下   回复  引用  查看    

#6楼  2008-04-08 12:51 平静中的疯狂      

支持一下   回复  引用  查看    

#7楼  2008-04-08 12:53 李涛      

支持!   回复  引用  查看    

#8楼  2008-04-08 12:56 Must Studying [未注册用户]

真的不错 ,学习!谢谢了   回复  引用  查看    

#9楼  2008-04-08 13:01 李子      

真的不错 ,学习!谢谢了   回复  引用  查看    

#10楼  2008-04-08 13:06 ZH-CN      

嗯~,点击按钮   回复  引用  查看    

#11楼  2008-04-08 13:15 ASP.NET CMS [未注册用户]

很不错啊

研究一下

嘿嘿   回复  引用  查看    

#12楼  2008-04-08 13:16 Justin      

Firefox下弹出新页显示undefined,并且一直是等待状态

BTW:支持lz的share精神   回复  引用  查看    

#13楼  2008-04-08 13:19 ξσ Dicky σξ      

good   回复  引用  查看    

#14楼  2008-04-08 13:23 ColdDog      

不错,之前我也用了一个类似的代码实现同样的效果,不过如果滚动内容多了会导致后面的内容不能完全显示到滚动区,需要精确设定滚动区高度和滚动高度。。。   回复  引用  查看    

#15楼 [楼主] 2008-04-08 13:23 狼Robot      

@生鱼片
@留恋星空
@平静中的疯狂
@李涛
@Must Studying
@李子
@ASP.NET CMS
@ξσ Dicky σξ
第一次发文就得到各位的支持,在下谢过了。   回复  引用  查看    

#16楼  2008-04-08 13:24 DinDin      

如果能把两个上下箭头的style做的更好看一些,并且设置两边按钮的style.cursor="hand"就更好了。   回复  引用  查看    

#17楼 [楼主] 2008-04-08 13:25 狼Robot      

@ColdDog
这个有考虑到的,js代码里面有个LineHeight表示每次滚动的高度。   回复  引用  查看    

#18楼 [楼主] 2008-04-08 13:27 狼Robot      

@DinDin
这些都是些样式细节上的问题,如果做到页面里的话是肯定要美化的,为了避免干扰大家的视线,我就没加太多的html标签和css了。呵呵。   回复  引用  查看    

#19楼  2008-04-08 14:10 马可香蕉      

不错,参考下   回复  引用  查看    

#20楼  2008-04-08 14:26 summer99      

不错,谢谢   回复  引用  查看    

#21楼  2008-04-08 14:33 scotoma      

非常不错支持下呵呵.......   回复  引用  查看    

#22楼  2008-04-08 14:36 Kevin Li      

拜读   回复  引用  查看    

#23楼  2008-04-08 15:10 早班火车      

支持~   回复  引用  查看    

#24楼 [楼主] 2008-04-08 15:16 狼Robot      

@Justin
firefox弹窗写内容没仔细看过,不知道到底能不能写,先不理它了,不行的话可以把demo下载下来看。呵呵。   回复  引用  查看    

#25楼  2008-04-08 15:53 dangnilaoqu [未注册用户]

Firefox不行,示定义!   回复  引用  查看    

#26楼  2008-04-08 16:57 老刘.      

挺好,支持下~   回复  引用  查看    

#27楼 [楼主] 2008-04-08 17:09 狼Robot      

@ZH-CN
@dangnilaoqu

显示效果的按钮实际上就是新开一个window,然后再把当前页面里的代码write到新的窗口里去,不知道firefox的弹窗要怎么操作,window.open后好像不能往里面写东西,所以问题出在window.open这里,实际代码是可以运行的。后面提供的Demo源码下载下载后在firefox中是可以运行的。   回复  引用  查看    

#28楼  2008-04-08 17:44 TT.Net      

在第一行的时候点向上滚动没用   回复  引用  查看    

#29楼  2008-04-08 22:25 李战      

实在是太精彩了,这正是俺想要的啊。
俺有学到了新招。   回复  引用  查看    

#30楼  2008-04-08 22:54 qwzsky [未注册用户]

支持一下   回复  引用  查看    

#31楼  2008-04-08 23:27 早班火车      

return function()
{
variable[method](param);
}

这个函数不错。挺通用的,学习一下。   回复  引用  查看    

#32楼 [楼主] 2008-04-09 00:33 狼Robot      

@李战
李老师又来笑话我了。呵呵。   回复  引用  查看    

#33楼  2008-04-09 09:02 猫猫      

谢谢博主了啊,样式什么再增加点上去应该不错的   回复  引用  查看    

#34楼  2008-04-09 09:24 梁逸晨      


  回复  引用  查看    

#35楼 [楼主] 2008-04-09 09:39 狼Robot      

@梁逸晨
这个问题不是Demo的问题,而是我在文章中加的[查看效果]的按钮上的代码有问题,你可以直接把Demo下载下来用firefox打开,我测试了是可以用的。
我把按钮的代码贴出来吧,看有没有高人能帮忙看看firefox弹窗后要怎样才能用document.write().
<input onclick="var win=window.open();win.document.write('<scr' + 'ipt language=\'javascript\' type=\'text/javascript\' />'+document.getElementById('jscode').innerText+'</scri'+'pt>' + document.getElementById('htmlcode').innerText);" type=button value=查看效果>   回复  引用  查看    

#36楼  2008-04-09 09:56 jhyc [未注册用户]

很不错的东东啊,没准以后会用到,我不客气的拿了:)   回复  引用  查看    

#37楼  2008-04-09 11:03 梁逸晨      

demo文件可以在火狐中正确运行,是我之前没有注意,误会楼主了。
感谢楼主的代码。   回复  引用  查看    

#38楼  2008-04-09 11:05 bmrxntfj      

方法是挺多的。
不过看看这个,曾轰动一时。
http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html   回复  引用  查看    

#39楼  2008-04-09 11:35 andy.wu      

safari下查看有问题



  回复  引用  查看    

#40楼  2008-04-09 13:09 长空新雁      

支持   回复  引用  查看    

#41楼  2008-04-17 08:44 BAsil      

支持一下   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-31 14:50 编辑过
 
另存  打印
最新IT新闻:
· 雅虎首页大变脸 阿里风格上身
· 万名Linux使用者向暴雪请愿Linux版《Diablo III》
· 56.com我乐网将全面转行 退出视频行业
· Joost借道TOM在线 将正式进军中国
· 微软副总裁公开承认Vista存在问题