jQuery重写jQuery.noConflict();

时间:2013-08-16 12:14:06

标签: javascript jquery

我在页面上运行这个JS,

但如果我用jQuery.noConflict();清除js,它将无效。

我检查了JS控制台,但没有运气,因为这只有在将鼠标悬停在图像上时才有效。

问:

jQuery.noConflict();对此代码的作用是什么?

我的想法如何解决它:

必须用propper $替换jQuery,但我对jQuery不太了解,并且不知道哪个$必须被替换。如果是,我应该在代码中替换$

示例:

// Start
        $.mglass = function(element, options) {

替换为

// Start
        jQuery.mglass = function(element, options) {

感谢您的回答,更正和代码。

JS:

这个JS做了什么,它在图像悬停上显示放大镜

来源:https://github.com/younes0/jQuery-MGlass

jquery library code here ...

jQuery.noConflict();

(function($) {

    // Start
    $.mglass = function(element, options) {

        // Defaults
        var defaults = {
            opacity: 0.4,
            speed: 150,
            wrapper: true
        };

        var plugin = this, $element = $(element);

        plugin.settings = {};


        // Constructor
        plugin.init = function() {

            plugin.settings = $.extend({}, defaults, options);

            if (plugin.settings.wrapper) {
                $element.wrap('<div class="mglassWrapper" />');
            }

            var 
                h = $element.height(), 
                w = $element.width(),
                b = $element.css('border-top-width')
            ;

            var overlayStyle = 'width: '+w+'px; height: '+h+'px;'; 

            // if original image has border (border-top as reference), set width as margin
            if (b) {
                overlayStyle+= 'margin: '+b+';';
            }

            // CSS3 transition Support ?
            if (typeof $.css3Transitions === 'undefined') {
                $.css3Transitions = plugin.supportsTransitions();
            }
            if ($.css3Transitions) {
                overlayStyle+= $.fn.mglass.transitionProperty+': opacity '+(plugin.settings.speed/1000)+'s ease;';
            }

            // Mglass Div
            $overlay = $('<div class="mglass" style="'+overlayStyle+'"></div>');
            $overlay.insertBefore($(element));

            // No CSS3 transition support : javascript fallback
            if ( ! $.css3Transitions) {
                $overlay.hover(
                    function () {
                        $(this).stop().animate({"opacity": plugin.settings.opacity}, plugin.settings.speed);
                    },
                    function () {
                        $(this).stop().animate({"opacity": 0}, 100);
                    }
                );
            }


        },

        plugin.supportsTransitions = function() {

            var el      = document.createElement('div');
            var vendors = ['', 'Ms', 'Moz', 'Webkit', 'O'];

            for (var i = 0, len = vendors.length; i < len; i++) {
                var prop = vendors[i] + 'Transition';
                if (prop in el.style) {
                    $.fn.mglass.transitionProperty = '-'+vendors[i].toLowerCase()+'-transition';
                    return true;
                }
            }

            return false;

        };


        // Init
        plugin.init();

    };

    // Add the plugin to the jQuery.fn object
    $.fn.mglass = function(options) {
        return this.each(function() {
            if (undefined === $(this).data('mglass')) {
                var plugin = new $.mglass(this, options);
                $(this).data('mglass', plugin);
            }
        });
    };

// End
})(jQuery);

然后在HTML中我将此内容发布在页面内容的末尾

<script>
   jQuery("img").mglass({
       opacity: 0.5
    });
</script>

3 个答案:

答案 0 :(得分:0)

实际上,看起来该插件“正在运行”,尽管它可能无法获得您想要的结果。

请参阅底部的代码 fiddle (页面上的Moo工具可提供$之间的冲突)。我为$ .mglass作用的元素添加了一个简单的淡入淡出,并在页面上的图像上调用了插件。插件创建的fadeto触发器和.mglass包装器div正被添加到DOM中。

关于为什么这不起作用的初步想法是CSS,您是否已将mglass css添加到您的网页?

答案 1 :(得分:0)

解决方案位于已修改的代码中,我在代码前面添加了(function($) { },以便$可以运行,并且不会跨越其他库

答案 2 :(得分:0)

如果有的话,如果你这样做,则不需要重写:

(function ($) {
    // your old code here
}(jQuery.noConflict()));