【问题标题】:jQuery plugin feedbackjQuery插件反馈
【发布时间】:2009-07-04 23:46:50
【问题描述】:

我是构建 jQuery 插件的新手。 我已经看到并使用了很多工具提示插件,今天我决定构建自己的。

我可以就代码获得一些反馈吗? 什么有效,什么无效。 优化。 缓存。
我该怎么做才能让它更快更好?

这对我的学习非常有帮助,希望对其他人也有帮助。

这是我的插件:

;(function($) {
    $.fn.jTooltip = function(options) {

        opts = $.extend({}, $.fn.jTooltip.defaults, options);

        return this.each(function() {

            var $this = $(this);
            var content;
            var showTimeout;

            $tip = $('#jTooltip');
            if($tip.size() == 0){
                $('body').append('<div id="jTooltip" style="display:none;position:absolute;"><div></div></div>');
                $tipContent = $('#jTooltip div');
            }

            $this.mouseover(function(event) {   
                content = $this.attr('title');
                $this.attr('title', '');
                $tipContent.html(content);  
                $body.bind('mousemove', function(event){
                    $tip.css({
                        top: $(document).scrollTop() + (event.pageY + opts.yOffset),
                        left: $(document).scrollLeft() + (event.pageX + opts.xOffset)
                    });
                });
                showTimeout = setTimeout('$tip.fadeIn(' + opts.fadeTime + ')', opts.delay);
            });

            $this.mouseout(function(event) {
                clearTimeout(showTimeout);  
                $this.attr('title', content);
                $('body').unbind('mousemove');
                $tip.hide();
            });

        });
    };

    $.fn.jTooltip.defaults = {
        delay: 0,
        fadeTime: 300,
        yOffset: 10,
        xOffset: 10
    };

})(jQuery);


更新代码

        ;(function($) {
    $.fn.jTooltip = function(options) {

        opts = $.extend({}, $.fn.jTooltip.defaults, options);

        return this.each(function() {

            var $this = $(this);
            var showTimeout;

            $this.data('title',$this.attr('title'));
            $this.removeAttr('title');

            $document = $(document);
            $body = $('body');
            $tip = $('#jTooltip');
            $tipContent = $('#jTooltip div');
            if($tip.length == 0){
                $body.append('<div id="jTooltip" style="display:none;position:absolute;"><div></div></div>');       
            }

            $this.hover(function(event){
                $tipContent.html($this.data('title'));
                $body.bind('mousemove', function(event){
                    $tip.css({
                        top: $document.scrollTop() + (event.pageY + opts.yOffset),
                        left: $document.scrollLeft() + (event.pageX + opts.xOffset)
                    });
                });
                showTimeout = setTimeout(function(){
                    $tip.fadeIn(opts.fadeTime);                           
                }, opts.delay);              
            }, function(){
                clearTimeout(showTimeout);  
                $body.unbind('mousemove');
                $tip.hide();
            });

        });
    };

    $.fn.jTooltip.defaults = {
        delay: 0,
        fadeTime: 300,
        yOffset: 10,
        xOffset: 10
    };

})(jQuery);

如果您有更多反馈,请告诉我 ;)

【问题讨论】:

  • mofle - 如果您可以将修改后的代码添加到您的问题中,那就太好了,可以帮助其他人,我们仍然可以找到改进它的方法。
  • 我已经相应地更新了代码;)

标签: javascript jquery plugins tooltip feedback


【解决方案1】:

使用 .length 而不是 .size()。在内部 size() 调用长度,所以只是节省了额外的调用。

在创建提示并使用 .data('tip', title) 将提示存储在元素上时,请考虑删除 title 属性。这将避免您需要不断地空白标题然后重新添加它。

为您在 setTimeout 中所做的工作创建一个函数。隐含的 eval 被认为是错误的,当您将字符串传递给 setTimeout/Interval 时会发生这种情况。

window.setTimeout( yourFadeTipFunc , opts.fadeTime);

将 $(document) 缓存在 var 中,而不是调用两次。

您可以将鼠标悬停链接到鼠标悬停。

除此之外,这是一个非常好的、干净的第一次尝试。

【讨论】:

    【解决方案2】:

    不能说有什么可怕的错误(如果我错了其他人会纠正我),但如果我要挑剔我会说使用这个:

    $this.removeAttr('title'); //slightly more readable
    

    而不是这个:

    $this.attr('title', '');
    

    我只是认为调用 removeAttr 而不是将属性设置为空字符串更漂亮 - 而且,它允许其他代码有条件地检查该属性的存在,而不是针对空字符串测试它当前设置的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2016-08-03
      • 2011-02-10
      • 2019-08-08
      • 1970-01-01
      相关资源
      最近更新 更多