javascript - jQuery 插件反馈

标签 javascript jquery plugins tooltip feedback

我是构建 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);

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

最佳答案

使用 .length 而不是 .size()。在内部 size() 调用 length 所以只是保存额外的调用。

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

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

window.setTimeout( yourFadeTipFunc , opts.fadeTime);

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

您可以将 mouseout 链接到 mouseover。

除此之外,这是一个非常好的、干净的初步努力。

关于javascript - jQuery 插件反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1083186/

相关文章:

javascript - 如何在javascript中转换日期列值,以及如何增加此日期变量?

jQuery (document).ready 不等待 DOM 准备好

ruby-on-rails - 为 Rails 编写 ActiveRecord 插件

java - Ebean错误-模型没有增强?

javascript - 我们如何为动态打印的 anchor 标签编写访问函数

mysql - Wordpress:将主题恢复为默认设置

javascript - JQuery 中的 If/Else 语句

javascript - 如何在 Samsung Tizen Gear s2 中使用边框滚动列表中的项目?

javascript - 为什么 npm 是用 JavaScript 编写的?

javascript - 执行 jquery 插件?