水平滚动字幕的jquery插件和原生代码

水平滚动字幕的jquery插件和原生代码

滚动可以用标签<marquee>来实现,网上有些文章说marquee只有IE支持,其他的浏览器不支持。开始我还信以为真,后来亲手是一把,才知道这种说法是错误的。其他浏览器(chrome,opera,safari,firefox等)都是支持marquee的(绝知此事要躬行啊)。既然所有浏览器都兼容不应该就没问题了,但是仔细发现marquee实现的滚动效果太挫了,一卡一卡地滚,用户体验不好,果然被pm打回来,说要修改。查了很多javascript代码,发现很多都是基于原生的javascript实现的,于是自己写了个符合自己需求的jquery插件,方便以后使用。

水平滚动字幕的jquery插件

复制代码
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 5 <title>滚动文字jquery插件</title>
 6 <script type="text/javascript" src="jquery-1.6.2.min.js"></script>
 7 <script type="text/javascript">
 8  (function($) {  
 9       $.fn.extend({        
10           roll: function(options) { 
11                        var defaults = {
12                             speed:1           
13                        };
14                        var options = $.extend(defaults, options); 
15                        var speed=(document.all) ? options.speed : Math.max(1,options.speed-1);
16                        if ($(this) == null) return ; 
17                        var $container = $(this);
18                        var $content = $("#content");
19                        var init_left = $container.width();
20                        $content.css({left:parseInt(init_left) + "px"});
21                        var This = this;
22                        var time = setInterval(function(){This.move($container,$content,speed);},20); //setInterval会改变this指向,即使加了This=this,也要用匿名函数封装,这里调试了n久
23                        
24                        $container.bind("mouseover",function()
25                       {
26                              clearInterval(time);
27                       });
28                        $container.bind("mouseout",function()
29                       {
30                              time = setInterval(function(){This.move($container,$content,speed);},20);
31                       });
32                        
33                        return this;    
34          },
35           move:function($container,$content,speed){
36                        var container_width = $container.width();
37                        var content_width = $content.width();
38                        if (parseInt($content.css("left")) + content_width > 0)
39                        {
40                             $content.css({left:parseInt($content.css("left")) - speed + "px"});
41                        }
42                        else
43                        {
44                             $content.css({left:parseInt(container_width) + "px"});
45                        }
46           }
47    });
48 })(jQuery);
49 //插件的调用$("#yourId").roll({speed:#yourSpeed});
50 $(document).ready(
51      function(){
52     $("#container").roll({speed:2});
53      }
54 );
55 </script>
56 <style type="text/css">
57 #container{
58     background:#CCCCCC;
59     position:relative;
60     overflow:hidden;  /*这个东西折腾了很久才弄出来*/
61     width:550px;
62     height:25px;
63     line-height:25px;
64     margin:100px;
65 }
66 
67 #content{
68     position:absolute;
69     left:0;
70     top:0;
71     white-space:nowrap;   /*重要,不然文字显示效果不好*/
72 }
73 </style>
74 
75 </head>
76 
77 <body>
78 <div id="container">
79     <div id="content">This is a roll word test,created by Baidu FE.</div>
80 </div>
81 </body>
82 </html>
复制代码

 

原生的javascript代码

复制代码
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 5 <title>滚动文字</title>
 6 <style type="text/css">
 7 #container{
 8     background:#CCCCCC;
 9     position:relative;
10     overflow:hidden;
11     width:550px;
12     height:25px;
13     line-height:25px;
14     margin:100px;
15 }
16 
17 #content{
18     position:absolute;
19     left:0;
20     top:0;
21     white-space:nowrap;
22 }
23 </style>
24 </head>
25 
26 <body>
27 <div id="container">
28     <div id="content">This is a roll word test,created by Baidu FE.</div>
29 </div>
30 <script type="text/javascript">
31 if(!window.rollWord){
32      var rollWord = {
33            container:document.getElementById("container"),
34            content:document.getElementById("content"),
35            _containerWidth:1,
36            _contentWidth:1,
37            _speed:1,
38            setSpeed:function(opt){
39                  var This = this;
40                  This._speed = opt;
41            },
42            setContainerWidth:function(){
43                  var This = this;
44                  This._containerWidth = This.container.offsetWidth;
45            },
46            setContentWidth:function(){
47                  var This = this;
48                  This._contentWidth = This.content.offsetWidth;
49            },
50            roll:function(){
51                  var This = this;
52                  This.content.style.left = parseInt(This._containerWidth) + "px";
53                  var time = setInterval(function(){This.move()},20);
54                  This.container.onmouseover = function(){
55                       clearInterval(time);
56                  };
57                  This.container.onmouseout = function(){
58                       time = setInterval(function(){This.move()},20);
59                  };
60            },
61            move:function(){
62                  var This = this;
63                  if(parseInt(This.content.style.left)+This._contentWidth > 0)
64                  {
65                       This.content.style.left = parseInt(This.content.style.left)-This._speed + "px";
66                  }
67                   else
68                   {
69                       This.content.style.left = parseInt(This._containerWidth) + "px";
70                   }                 
71            },
72            init:function(opt){
73                 var This = this;
74                 var speed = opt.speed || 1;
75                 This.setSpeed(speed);
76                 This.setContainerWidth();
77                 This.setContentWidth();
78                 This.roll();
79            }
80       }
81 }
82       rollWord.init({speed:2});
83 </script>
84 </body>
85 </html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值