从网上下载的一个jquery文字特效代码,有两处不懂的,请大神教一下。效果显示jQuery基于CSS3文字动画特效
html文件中有
<p class="ex1">TEXTYLE</p> <p class="ex2">FLIP</p>
js文件中
(function($){  
 $.fn.textyleF = function(options){
   var target = this;
   var targetTxt = target.contents();
   var defaults = {
     duration : 1000,
     delay : 150,
     easing : 'ease',
     callback : null
   };
   var setting = $.extend(defaults, options);
   targetTxt.each(function(){
     var texts = $(this);
     if(this.nodeType === 3){
       mkspn(texts);
     }
   });
   function mkspn(texts){
     texts.replaceWith(texts.text().replace(/(\S)/g,'<span>$1</span>'));
     console.log("texts="+texts);
   }
   return this.each(function(i){
     var child = target.children('span');
     target.css('opacity',1);
     child.each(function(i){
       $(this).delay(setting.delay*i)
         .queue(function(next) {
         $(this).css({
           display : 'inline-block',
           transform : 'rotateY(0deg) rotateX(0deg)',
           opacity : 1,
           transitionDuration : setting.duration + 'ms',
           transitionTimingFunction : setting.easing
         })
         next();
       });
       if(typeof setting.callback === 'function'){
         $(this).on('transitionend', function() {
          
           setting.callback.call(this);
           
         });
       } else {
         console.error('Textyle.js: `setting.callback` must be a function.');
       }
     });
   });
 };
}( jQuery ));
$(window).on('load',function(){
  $('.ex1').textyleF();
  $('.ex2').textyleF({
      duration : 2000,
      delay : 200,
      easing : 'cubic-bezier(0.77, 0, 0.175, 1)',
      callback : function(){
        $(this).css({
          color : '#fff',
          transition : '1s',
        });
        $('.desc').css('opacity',1);
      }
    });
  });问题1: texts.replaceWith(texts.text().replace(/(\S)/g,'<span>$1</span>'));
外层的replaceWith()的作用是把括号里的内容替换texts的文本对么?
但是控制台打印texts,不是<span>T</span>这样的,是Object [ #text ]?
问题2:setting.callback.call(this);
1、 我对call和this的用法一直没搞懂,这里要实现的效果应该是调用$('.ex2')..textyleF()里设置的callback吧?
2、那.call(this);在这里作用是什么?前后的this都是HTMLSpanElement。
3、call()可以改变this的指向?但是在这之前打印this是 。
<span style="display: inline-block; t…ier(0.77, 0, 0.175, 1);"> <span style="display: inline-block; t…or: rgb(255, 255, 255);"> <span style="display: inline-block; t…ier(0.77, 0, 0.175, 1);"> <span style="display: inline-block; t…or: rgb(255, 255, 255);"> <span style="display: inline-block; t…ier(0.77, 0, 0.175, 1);"> <span style="display: inline-block; t…or: rgb(255, 255, 255);"> <span style="display: inline-block; t…ier(0.77, 0, 0.175, 1);"> <span style="display: inline-block; t…or: rgb(255, 255, 255);"> <span style="display: inline-block; t…or: rgb(255, 255, 255);"> <span style="display: inline-block; t…or: rgb(255, 255, 255);"> <span style="display: inline-block; t…or: rgb(255, 255, 255);"> <span style="display: inline-block; t…or: rgb(255, 255, 255);">
在此句之后打印this,就没有
<span style="display: inline-block; t…ier(0.77, 0, 0.175, 1);">
所以调用了.call(this)的作用是什么?this指向变了?
问题3:①window.onload == $(window).on('load') ?
② $(function($){});== $(document).ready() ?
③ ②在dom树加载完就执行,所以是在①之前执行
④ (function($){...})(jquery);是自执行匿名函数?也是在dom加载完运行,那和$(function($){});有区别?
 慕移动2735134
慕移动2735134 随时随地看视频慕课网APP
随时随地看视频慕课网APP
相关分类