基于jQuery实现一个marquee无缝滚动的插件


Posted in Javascript onMarch 09, 2017

基于jQuery,实现一个marquee无缝滚动的插件,已经发布到 git.oschina.net,演示稍后更新(更新到 http://git.oschina.net/mqycn/jQueryMarquee )。

代码如下:

/**
 * 类库名称:jQuery.marquee
 * 实现功能:基于 jquery 实现的 marquee 无缝滚动插件
 * 作者主页:http://www.miaoqiyuan.cn/
 * 联系邮箱:mqycn@126.com
 * 使用说明:http://www.miaoqiyuan.cn/p/jquery-marquee
 * 最新版本:http://git.oschina.net/mqycn/jQueryMarquee
*/
jQuery.fn.extend({
  marquee : function(opt, callback){
    opt = opt || {};
    opt.speed = opt.speed || 30;
    opt.direction = opt.direction || 'left';
    opt.pixels = opt.pixels || 2;
    switch( opt.direction ){
      case "left":
      case "right":
        opt.weight = "width";
        opt.margin = "margin-left";
        opt.tpl = '<table><tr><td>[TABLE]</td><td>[TABLE]</td></tr></table>';
        break;
      case "top":
      case "bottom":
        opt.weight = "height";
        opt.margin = "margin-top";
        opt.tpl = '<table><tr><td>[TABLE]</td></tr></tr><td>[TABLE]</td></tr></table>';
        break;
      default:
        throw Error("[jQuery.marquee.js] Options.direction Error!");
    }
    switch( opt.direction ){
      case "left":
      case "top":
        opt.addon = -1;
        break;
      case "right":
      case "bottom":
        opt.addon = 1;
        break;
      default:
        throw Error("[jQuery.marquee.js] Options.direction Error!");
    }
    callback = typeof callback == "function" ? callback : function(){};
    //设置宽度
    $(this).each(function(){
      if( this.control ){
        clearInterval(this.control);
      } else {
        //如果第一次执行,初始化代码
        $(this)
          .data(opt.weight, opt.weight == 'width' ? $(this).find("table").width() : $(this).find("table").height())
          .width($(this).data(opt.weight) * 2)
          .html(opt.tpl.replace(/\[TABLE\]/ig, $(this).html()))
          .mouseover(function(){
            $(this).data("pause", true);
          }).mouseout(function(){
            $(this).data("pause", false);
          });
      }
      this.control = setInterval((function(){
        if( $(this).data("pause") ){
          return;
        }
        var _margin = parseInt($(this).css(opt.margin)) + opt.addon * opt.pixels;
        if( opt.addon == -1 && _margin + $(this).data(opt.weight) < 0 ){
          _margin = 0;
        }else if( opt.addon == 1, _margin > 0 ){
          console.log(_margin < 0,$(this).data(opt.weight));
          _margin = -1 * $(this).data(opt.weight);
        }
        $(this).css(opt.margin, _margin + "px");
        callback.bind(this)();
      }).bind(this), opt.speed);
    });
    return $(this);
  }
});

如果在IE9以下使用,还需要在之前增加如下代码:

/**
 * IE8插件(解决 function 不支持 bind 的问题),非原创
*/
if (!Function.prototype.bind) {
  Function.prototype.bind = function(oThis) {
    if (typeof this !== "function") {
      throw new TypeError("[jQuery.marquee.ie8] Caller is not a function");
    }
    var aArgs = Array.prototype.slice.call(arguments, 1),
      fToBind = this,
      fNOP = function() {},
      fBound = function() {
        return fToBind.apply(this instanceof fNOP && oThis ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments)));
      };
    fNOP.prototype = this.prototype;
    fBound.prototype = new fNOP();
    return fBound;
  };
}

一共有三个可选参数,一个回调方法。

direction,移动方向:支持 左:left 右:right 上:top 下:bottom;

pixels,每次移动的像素数

speed,两次移动之前的间隔时间数(毫秒)

调用方法如下:

$("scroll-a").marquee();
$("scroll-b").marquee({direction:'top'});
$("scroll-c").marquee({direction:'top',pixels:2,speed:30});
$("scroll-d").marquee({direction:"top",pixels:2,speed:30}, function(){
  console.log("执行了一次");
});

以上所述是小编给大家介绍的基于jQuery实现一个marquee无缝滚动的插件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
文字幻灯片
Jun 26 Javascript
Tinymce+jQuery.Validation使用产生的BUG
Mar 29 Javascript
javascript闭包的理解和实例
Aug 12 Javascript
jQuery对表单的操作代码集合
Apr 06 Javascript
JavaScript之HTMLCollection接口代码
Apr 27 Javascript
浅谈javascript 归并方法
Jan 21 Javascript
使用Node.js配合Nginx实现高负载网络
Jun 28 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
Sep 20 Javascript
详解Python中logging日志模块在多进程环境下的使用
Dec 26 Javascript
JS排序之选择排序详解
Apr 08 Javascript
浅谈vue项目,访问路径#号的问题
Aug 14 Javascript
JavaScript 数组去重详解
Sep 15 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 #Javascript
js实现显示手机号码效果
Mar 09 #Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
Mar 09 #Javascript
javascript 秒表计时器实现代码
Mar 09 #Javascript
react实现pure render时bind(this)隐患需注意!
Mar 09 #Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
Mar 09 #Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
Mar 09 #Javascript
You might like
PHP调用VC编写的COM组件实例
2014/03/29 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
python实现朴素贝叶斯算法
2018/11/19 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
会展中心部门工作职责
2013/11/27 职场文书
前台文员个人求职信范文
2014/01/05 职场文书
会计工作心得体会
2014/01/13 职场文书
婚礼主持词开场白
2014/03/13 职场文书
安全责任协议书
2014/04/21 职场文书
教师见习报告范文
2014/11/03 职场文书
创先争优个人总结
2015/03/04 职场文书
教师研修随笔感言
2015/11/18 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android