基于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 相关文章推荐
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 Javascript
jQuery动态添加的元素绑定事件处理函数代码
Aug 02 Javascript
用jQuery模拟页面加载进度条的实现代码
Dec 19 Javascript
jQuery实现弹出窗口中切换登录与注册表单
Jun 05 Javascript
String字符串截取的四种方式总结
Nov 28 Javascript
使用bat打开多个cmd窗口执行gulp、node
Feb 17 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
Mar 28 Javascript
用Vue.js在浏览器中实现裁剪图像功能
Jun 18 Javascript
layer弹出层倒计时关闭的实现方法
Sep 27 Javascript
vue实现虚拟列表功能的代码
Jul 28 Javascript
使用js原生实现年份轮播选择效果实例
Jan 12 Javascript
Vue OpenLayer测距功能的实现
Apr 20 Vue.js
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
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
利用Node.js+Koa框架实现前后端交互的方法
2017/02/27 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
python3.5使用tkinter制作记事本
2016/06/20 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
python自动发送邮件脚本
2018/06/20 Python
python障碍式期权定价公式
2019/07/19 Python
浅析Python 责任链设计模式
2020/09/11 Python
python用Configobj模块读取配置文件
2020/09/26 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
七年级音乐教学反思
2014/01/26 职场文书
保健品市场营销方案
2014/03/31 职场文书
团队精神口号
2014/06/06 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
南京导游词
2015/02/03 职场文书
公司员工体检通知
2015/04/21 职场文书
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS