基于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 - 如何引入js代码
Mar 09 Javascript
JScript中的undefined和&quot;undefined&quot;的区别
Mar 08 Javascript
Extjs NumberField后面加单位实现思路
Jul 30 Javascript
详解AngularJS中的表格使用
Jun 16 Javascript
javascript 判断两个日期之差的示例代码
Sep 05 Javascript
javascript跑马灯抽奖实例讲解
Apr 17 Javascript
简单理解Vue条件渲染
Dec 03 Javascript
详解vue.js的事件处理器v-on:click
Jun 27 Javascript
JS和Canvas实现图片的预览压缩和上传功能
Mar 30 Javascript
vue2单元测试环境搭建
May 24 Javascript
基于javascript实现日历功能原理及代码实例
May 07 Javascript
JS call()及apply()方法使用实例汇总
Jul 11 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中计算未知长度的字符串哪个字符出现的次数最多的代码
2012/08/14 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
javascript 对象比较实现代码
2009/04/27 Javascript
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
Django 实现下载文件功能的示例
2018/03/06 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
python操作gitlab API过程解析
2019/12/27 Python
python dumps和loads区别详解
2020/02/04 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
Spy++的使用方法及下载教程
2021/01/29 Python
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
置业顾问岗位职责
2014/03/02 职场文书
学生会招新宣传语
2015/07/13 职场文书
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript