Maison >interface Web >js tutoriel >Tutoriel d'implémentation du plug-in de défilement transparent jQuery chapiteau

Tutoriel d'implémentation du plug-in de défilement transparent jQuery chapiteau

小云云
小云云original
2018-01-22 17:38:491891parcourir

Cet article présente principalement un plug-in qui implémente un défilement transparent de chapiteau basé sur jQuery. Il est très bon et a une valeur de référence. Les amis qui en ont besoin peuvent s'y référer.

Basé sur jQuery, un plug-in qui implémente le défilement transparent de marquee a été publié sur git.oschina.net, et la démo sera mise à jour ultérieurement (mise à jour vers http://git.oschina. net/mqycn/jQueryMarquee ).

Le code est le suivant :


/**
 * 类库名称: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 = &#39;<table><tr><td>[TABLE]</td><td>[TABLE]</td></tr></table>&#39;;
        break;
      case "top":
      case "bottom":
        opt.weight = "height";
        opt.margin = "margin-top";
        opt.tpl = &#39;<table><tr><td>[TABLE]</td></tr></tr><td>[TABLE]</td></tr></table>&#39;;
        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 == &#39;width&#39; ? $(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);
  }
});

S'il est utilisé sous IE9, vous devez ajouter le code suivant avant :


/**
 * 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;
  };
}

Il existe trois paramètres facultatifs et une méthode de rappel.

direction, direction de déplacement : support gauche : gauche droite : droite haut : haut bas : bas

pixels, le nombre de pixels déplacés à chaque fois

vitesse, deux mouvements ; Le nombre d'intervalles précédents (millisecondes)

La méthode d'appel est la suivante :


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

Recommandations associées :

Partage d'instance de sélection de composant d'applet WeChat

Introduction détaillée à la balise de sélection en html

Résumé des exemples d'utilisation de la balise de sélection JS pour implémenter le défilement de sélection Explication détaillée des exemples d'effets

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn