JQuery HoverIntent สำหรับเนื้อหาเมนูที่ไม่ซ้อนกัน

ฉันใช้ JQuery HoverIntent เพื่อสร้างเมนู

นี่คือโครงสร้างพื้นฐานของโค้ด HTML ของฉัน:

<ul>
    <li><a href="/th#" class="current">Home</a></li>
    <li id="sh-zone-menu-sub-services" class="submenu"><a href="/th#">Services</a></li>
    <li id="sh-zone-menu-sub-support" class="submenu"><a href="/th#">Support</a></li>
    <li id="sh-zone-menu-sub-contact" class="submenu"><a href="/th#">Contact</a></li>
    <li><a href="/th#">About Us</a></li>
</ul>
<div id="sh-zone-menu-sub-services-target" class="submenu-content">Services Content</div>
<div id="sh-zone-menu-sub-support-target" class="submenu-content">Support Content</div>
<div id="sh-zone-menu-sub-contact-target" class="submenu-content">Contact Content</div>

และนี่คือรหัส JQuery:

var $_ = jQuery;
$_(document).ready(function(){  

    function showSubMenu()
    {
        var source_id = $_(this).attr("id");
        $_(this).addClass("showsubmenu");
        $_("#"+source_id+"-target").show();
    }

    function hideSubMenu()
    {
        var source_id = $_(this).attr("id");
        $_(this).removeClass("showsubmenu");
        $_("#"+source_id+"-target").hide();
    }

    var subMenuConfig = 
    {
        interval: 100,
        sensitivity: 4,
        over: showSubMenu,
        timeout: 300,
        out: hideSubMenu 
    };

    $_("ul li.submenu").hoverIntent(subMenuConfig);
});

ทุกอย่างทำงานได้ดี แต่เมื่อเนื้อหาเมนูถูกเปิดเผยและฉันพยายามวางเมาส์ไว้เหนือเนื้อหานั้น เนื้อหานั้นก็หายไป

วิธีการกำหนดค่าโค้ด HTML ก่อนหน้านี้ DIV เนื้อหาเมนูย่อยถูกซ้อนอยู่ภายในแท็ก LI และวิธีนี้ใช้ได้ผลดี กล่าวคือ ด้วยการโฮเวอร์ลิงก์เมนูและเนื้อหา อย่างไรก็ตาม ฉันประสบปัญหาเกี่ยวกับการวางตำแหน่งสำหรับ IE (เนื่องจากเนื้อหาเมนูครอบคลุมส่วนใหญ่ของหน้า) ดังนั้นฉันจึงจำเป็นต้องนำเนื้อหาเหล่านั้นออกจากแท็ก LI

วิธีที่ฉันมีตอนนี้ใช้ได้กับ IE (ตามตำแหน่ง CSS) แต่ hoverIntent ไม่ทำงาน

มีวิธีใช้ hoverIntent เมื่อเนื้อหาเมนูของฉันไม่ได้ซ้อนอยู่ภายในแท็ก LI หรือไม่!

ขอบคุณ.


person BannerMan    schedule 07.06.2011    source แหล่งที่มา
comment
ลองดู: brandammo.co.uk/blog/2011/02/ นี่เป็นตัวอย่างที่สมบูรณ์   -  person John Magnolia    schedule 12.02.2012


คำตอบ (1)


ฉันรู้ว่าคุณโพสต์คำถามนี้มาระยะหนึ่งแล้ว และฉันมีประสบการณ์จำกัดกับปลั๊กอิน hoverIntent แต่นี่คือสิ่งที่ฉันรู้จากการดูโค้ด เหตุการณ์ mouseenter และ mouseleave ถูกผูกไว้กับวัตถุที่คุณผูกไว้กับ hoverIntent รหัสใน hoverIntent ที่เชื่อมโยงกับวัตถุของคุณคือ:

return this.bind('mouseenter', handleHover).bind('mouseleave', handleHover);

ดังนั้น หากคุณปล่อย ul และผูกเข้ากับองค์ประกอบ li จะเป็นดังนี้:

$("ul#ReportNav li").hoverIntent(config);

หลังจากที่ป๊อปอัปเกิดขึ้น (แสดงองค์ประกอบเพิ่มเติมจาก ul) มันจะไม่ยิงเหตุการณ์ mouseleave เมื่อคุณวางเมาส์เหนือป๊อปอัป เนื่องจากองค์ประกอบทั้งหมดในป๊อปอัปเป็นลูกของ ul

ดังนั้น... ถ้าคุณพูดว่า... div wrapper ที่มี div อยู่ข้างในเป็นทริกเกอร์โฮเวอร์ คุณต้องการที่จะผูก hoverIntent ด้วยไวยากรณ์ที่ถูกต้องและมันก็ทำงานได้ดี (ทุกอย่างในป๊อปอัปจะเป็นลูกของโฮเวอร์ องค์ประกอบ):

<div id="ListContainer">
<div id="ListTableContainer">
<!-- anything you want -->
</div>
</div>

$("div#ListContainer div#ListTableContainer").css({ 'opacity': '0' });
$("div#ListContainer").hoverIntent(config);

ฉันกำลังค้นหาสิ่งที่คล้ายกันและเจอคำถามนี้อยู่เรื่อย คิดจะตอบก็แล้วกัน

person Paul Perrick    schedule 06.08.2011