【问题标题】:Add hoverIntent to jquery dropdown menu script将 hoverIntent 添加到 jquery 下拉菜单脚本
【发布时间】:2011-03-22 15:54:44
【问题描述】:

大家好,我想将 hoverIntent 事件添加到我的 jquery 下拉菜单顶部链接,但我不知道我是如何做到的,请帮助下面是我从 http://www.dynamicdrive.com/style/csslibrary/item/jquery_multi_level_css_menu_2/ 获得的 jquery 代码 我无法在此处发布代码请在此处结帐http://www.dynamicdrive.com/cssexamples/media/jqueryslidemenu.js

【问题讨论】:

    标签: jquery navigation drop-down-menu hoverintent


    【解决方案1】:

    更新为使用动态驱动器的 jquery 滑动菜单:

    在此处查看示例:http://jsfiddle.net/vnvQn/

    在 dynamicdrive slidemenu.js 中更改:

    $curobj.hover(
                    function(e) {
                        var $targetul = $(this).children("ul:eq(0)")
                        this._offsets = {
                            left: $(this).offset().left,
                            top: $(this).offset().top
                        }
                        var menuleft = this.istopheader ? 0 : this._dimensions.w
                        menuleft = (this._offsets.left + menuleft + this._dimensions.subulw > $(window).width()) ? (this.istopheader ? -this._dimensions.subulw + this._dimensions.w : -this._dimensions.w) : menuleft
                        if ($targetul.queue().length <= 1) //if 1 or less queued animations
                        $targetul.css({
                            left: menuleft + "px",
                            width: this._dimensions.subulw + 'px'
                        }).slideDown(jqueryslidemenu.animateduration.over)
                    }, function(e) {
                        var $targetul = $(this).children("ul:eq(0)")
                        $targetul.slideUp(jqueryslidemenu.animateduration.out)
                    }) //end hover
    

    到这里:

    var hoverOver = function(e) {
        var $targetul = $(this).children("ul:eq(0)")
        this._offsets = {
            left: $(this).offset().left,
            top: $(this).offset().top
        }
        var menuleft = this.istopheader ? 0 : this._dimensions.w
        menuleft = (this._offsets.left + menuleft + this._dimensions.subulw > $(window).width()) ? (this.istopheader ? -this._dimensions.subulw + this._dimensions.w : -this._dimensions.w) : menuleft
        if ($targetul.queue().length <= 1) //if 1 or less queued animations
            $targetul.css({
                left: menuleft + "px",
                width: this._dimensions.subulw + 'px'
            }).slideDown(jqueryslidemenu.animateduration.over)
    }
    var hoverOut = function(e) {
        var $targetul = $(this).children("ul:eq(0)")
        $targetul.slideUp(jqueryslidemenu.animateduration.out)
    } //end hover
    
    var config = {    
        over: hoverOver, // function = onMouseOver callback (REQUIRED)    
        timeout: 500, // number = milliseconds delay before onMouseOut    
        out: hoverOut // function = onMouseOut callback (REQUIRED)    
    };
    
    $curobj.hoverIntent(config);
    

    初步反应:

    来自 Soh Tonaka 的 Mega Dropdown Menu by Soh Tanaka 示例

    具有如下 HTML 菜单结构:

    <ul id="topnav"> 
            <li> 
                <a href="#" class="home">Home</a> 
            </li> 
            <li> 
                <a href="#" class="products">Products</a> 
                <div class="sub"> 
                    <ul> 
                        <li><h2><a href="#">Desktop</a></h2></li> 
                        <li><a href="#">Navigation Link</a></li> 
                        <li><a href="#">Navigation Link</a></li> 
                        <li><a href="#">Navigation Link</a></li> 
                        <li><a href="#">Navigation Link</a></li> 
                        <li><a href="#">Navigation Link</a></li> 
                        <li><a href="#">Navigation Link</a></li> 
                        <li><a href="#">Navigation Link</a></li> 
                    </ul> 
                </div>
            ...
    

    像这样使用 jquery:

    function megaHoverOver(){
            $(this).find(".sub").stop().fadeTo('fast', 1).show();
    
            //Calculate width of all ul's
            (function($) { 
                jQuery.fn.calcSubWidth = function() {
                    rowWidth = 0;
                    //Calculate row
                    $(this).find("ul").each(function() {                    
                        rowWidth += $(this).width(); 
                    }); 
                };
            })(jQuery); 
    
            if ( $(this).find(".row").length > 0 ) { //If row exists...
                var biggestRow = 0; 
                //Calculate each row
                $(this).find(".row").each(function() {                             
                    $(this).calcSubWidth();
                    //Find biggest row
                    if(rowWidth > biggestRow) {
                        biggestRow = rowWidth;
                    }
                });
                //Set width
                $(this).find(".sub").css({'width' :biggestRow});
                $(this).find(".row:last").css({'margin':'0'});
    
            } else { //If row does not exist...
    
                $(this).calcSubWidth();
                //Set Width
                $(this).find(".sub").css({'width' : rowWidth});
    
            }
        }
    
        function megaHoverOut(){ 
          $(this).find(".sub").stop().fadeTo('fast', 0, function() {
              $(this).hide(); 
          });
        }
    
    
        var config = {    
             sensitivity: 2, // number = sensitivity threshold (must be 1 or higher)    
             interval: 100, // number = milliseconds for onMouseOver polling interval    
             over: megaHoverOver, // function = onMouseOver callback (REQUIRED)    
             timeout: 500, // number = milliseconds delay before onMouseOut    
             out: megaHoverOut // function = onMouseOut callback (REQUIRED)    
        };
    
        $("ul#topnav li .sub").css({'opacity':'0'});
        $("ul#topnav li").hoverIntent(config);
    

    【讨论】:

    • 这很酷,但我只想将 hoverintent 添加到 jqueryslide.js 这是幻灯片菜单
    • 非常感谢
    • 现在很棒,我正在寻找大约 8 天的内容 非常非常感谢 mdmullinax 你真的很有帮助
    【解决方案2】:

    我使用doTimeout plugin

    doTimeout Hover Intent Page

    并编写类似这样的代码

      $("#writer").find('.note, .task').hover(function () {
                $(this).find('.listed').stop(true, true).doTimeout('listed', 250, 'slideDown', 'fast', 'easeInOutCubic');
            }, function(){
                $(this).find('.listed').stop(true, true).doTimeout('listed', 250, 'slideUp', 'fast', 'easeInOutCubic');
            });
    

    【讨论】:

    • 请告诉我如何修改jqueryslides菜单脚本来实现这个效果
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    相关资源
    最近更新 更多