基于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 相关文章推荐
javascript form 验证函数 弹出对话框形式
Jun 23 Javascript
Javascript 通过json自动生成Dom的代码
Apr 01 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
May 19 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
Sep 14 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
Dec 10 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
Dec 09 Javascript
JS中input表单隐藏域及其使用方法
Feb 13 Javascript
Angular2安装angular-cli
May 21 Javascript
对Vue table 动态表格td可编辑的方法详解
Aug 28 Javascript
vue-cli4.x创建企业级项目的方法步骤
Jun 18 Javascript
Element Steps步骤条的使用方法
Jul 26 Javascript
微信小程序实现加入购物车滑动轨迹
Nov 18 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+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
javascript实现留言板功能
2020/02/08 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
JS canvas实现画板和签字板功能
2021/02/23 Javascript
python re正则表达式模块(Regular Expression)
2014/07/16 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
Python编程之变量赋值操作实例分析
2017/07/24 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
介绍一下gcc特性
2015/10/31 面试题
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
工作态度检讨书
2014/02/11 职场文书
新学期决心书
2014/03/11 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
公司联欢会策划方案
2014/05/19 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
八一建军节主持词
2015/07/01 职场文书
庆祝教师节主题班会
2015/08/17 职场文书