2012-12-13 62 views
0

嗨我有另一个问题刚刚解决了由成员的计算器,非常感谢您的及时回复和专业。下面是JS代码,我发现ibox根本不会调用。jQuery不互相呼叫

(function($) { 
    $.fn.ibox = function() { 
     // set zoom ratio // 
     alert("asdfas"); 
     resize = 20; 
     //////////////////// 
     var img = this; 
     img.parent().append("<div id='ibox' />"); 
     var ibox = $("#ibox"); 
     var elX = 0; 
     var elY = 0; 

     img.each(function() { 
      var el = $(this); 

      el.mouseenter(function() { 
       ibox.html(""); 
       var elH = el.height(); 
       elX = el.position().left - 6; // 6 = CSS#ibox padding+border 
       elY = el.position().top - 6; 
       var h = el.height(); 
       var w = el.width(); 
       var wh; 
       checkwh = (h < w) ? (wh = (w/h * resize)/2) : (wh = (w * resize/h)/2); 

       $(this).clone().prependTo(ibox); 
       ibox.css({ 
        top: elY + "px", 
        left: elX + "px" 
       }); 

       ibox.stop().fadeTo(200, 1, function() { 
        $(this).animate({top: "-="+(resize/2), left:"-="+wh},400).children("img").animate({height:"+="+resize},400); 
       }); 
      }); 

      ibox.mouseleave(function() { 
       ibox.html("").hide(); 
      }); 
     }); 
    }; 
}); 

$(document).ready(function() { 
    $("#clickMe").click(function() { 
    alert("Me"); 
    }); 

    var html = ""; 
    var num = 1; 

    for (var idx=0; idx<100; idx++) 
    { 
     if(num == 4) num = 1; 
     html += "<img src='image/img" + num + ".jpg' class='grayscale' />"; 
     num ++; 
    } 
    $("#images").html(html); 

    $("#images img").ibox(); 


}); 

我是否错过了这里的任何调用步骤?请帮忙。 谢谢

回答

1

你已经把你的jQuery插件包装在一个中,立即调用函数表达式,除非你没有真正调用它。

(jQuery)函数表达式后:

(function($) { 
    $.fn.ibox = function() { 
     ... 
    } 
})(jQuery); 

从“空”函数表达式为一个实际上是被称为打开它。

3

问题是你还没有通过jQuery对象到其包围你的插件

(function($) { 
    .... 
}); <-- Oops 

改成这样的功能:

(function($) { 
    .... 
})(jQuery); <-- Yay! 

有关于插件开发的好文章,其你应该阅读:http://docs.jquery.com/Plugins/Authoring

+0

wooo。尖锐的一个!非常感谢。它现在效果很好 – user994985

+0

实际上,这里没有关闭。该插件不会引用外部绑定的变量,只会引用(不)传递的参数。该插件封装在_immediately调用(匿名)函数expression_中 - 他只是忘记调用它。 – Alnitak

+0

我想你已经错过了这一点,并可能不明白为什么插件是这样写的。在这种情况下,IIFE的_sole_目的是允许在插件代码中使用'$'作为'jQuery'的简短_alias_。在其他情况下,IIFE可以作为只有插件才能访问的变量的封闭范围。碰巧,插件函数本身是一个闭包,因为它绑定在包含IIFE的''''参数上。 – Alnitak