我正在構建一個完全響應式訪問菜單使用jQuery/JavaScript和CSS。修復響應菜單父切換 - jQuery/Javasicript
我已經得到了一切正常工作,除了當視口小於535px和切換菜單顯示,父母點擊不擴大孩子,只是直接鏈接到該頁面。
我喜歡它,所以當你點擊父母時,例如說「工具」,孩子顯示,並且父項和孩子都是可點擊的鏈接。
這裏是一個臨時網站看看:website link
這裏是JS的一個樣本:
var ww = 0;
jQuery(document).ready(function($) {
$(".menu").show();
$(".menu .currenthas-child a, .menu .has-child a").each(function() {
if ($(this).next().length > 0) {
$(this).addClass("parent");
};
});
$(".toggleMenu").click(function(e) {
e.preventDefault();
$(this).toggleClass("active");
if($(this).hasClass("active")){
//show menu
$(".menu").removeClass("hidden").fadeIn(250);
} else {
//hide menu
$(".menu").addClass("hidden");
}
});
$(".menu li ul li").click(function(e) {
if ($(".toggleMenu").hasClass("active")){
$(".menu").toggleClass("hidden");
}
});
//on click, anywhere on page, close all menu items
$(document).click(function() {
$(".menu li").each(function() {
if ($(this).hasClass("hover") || $(this).hasClass("keyhover")) {
$(this).removeClass("hover");
$(this).removeClass("keyhover");
//console.log('hover removed');
}
});
});
//Focus State - Navigation
$(".menu li").focusin(function (e) {
if (!$(this).hasClass("keyhover")) {
$(this).addClass("keyhover");
showElement($(".menu"));
}
//console.log('menu item focusin');
});
//Blur State - Navigation
$(".menu li").focusout(function (e) {
if ($(this).hasClass("keyhover")) {
$(this).removeClass("keyhover");
}
if ($(this).hasClass("hover")) {
$(this).removeClass("hover");
}
//console.log('menu item focusout');
});
//Focus State - Navigation Sub Items
$(".menu li ul li").focusin(function() {
if (!$(this).hasClass("glow")) {
$(this).addClass("glow");
}
});
//Blur State - Navigation Sub Items
$(".menu li ul li").focusout(function() {
if ($(this).hasClass("glow")) {
$(this).removeClass("glow");
}
});
//on window resize, recheck size and adjustMenu
$(window).bind('resize orientationchange', function() {
ww = viewportSize.getWidth();
adjustMenu();
//UN-COMMENT FOR DEBUG OUTPUT
//var widthTest = document.documentElement.clientWidth;
//var widthTest2 = screen.width;
//console.log("document.documentElement.clientWidth ="+widthTest);
//console.log("screen.width = "+widthTest2);
//console.log("viewport().width = "+ww);
//var mql = window.matchMedia("screen and (max-width: 47.938em)");
//console.log(mql);
});
var hideElement = function(elementToModify) {
elementToModify.addClass("hidden");
}
var showElement = function(elementToModify) {
elementToModify.removeClass("hidden");
}
var adjustMenu = function() {
if (ww <= 535) {
$(".toggleMenu").css("display", "inline-block");
if (!$(".toggleMenu").hasClass("active")) {
hideElement($(".menu"));
} else {
showElement($(".menu"));
}
$(".menu li h2.parent").unbind('click').bind('click', function(e) {
// must be attached to anchor element to prevent bubbling
e.preventDefault();
if (e.stopPropagation){
e.stopPropagation();
}
else if(window.event){
window.event.cancelBubble=true;
}
//close any sibling menu items
//$(this).parent().siblings('li').removeClass("hover");
//$(this).parent().siblings('li').removeClass("keyhover");
//handle click request
if (!$(this).parent().hasClass("hover")) {
$(this).parent().addClass("hover");
//console.log('hover added');
} else {
$(this).parent().removeClass("hover");
$(this).parent().removeClass("keyhover");
//console.log('hover removed');
}
});
}
else if (ww > 535) {
$(".toggleMenu").css("display", "none");
$(".toggleMenu").removeClass("active");
//show menu parents
showElement($(".menu"));
//hide any popped up menu sub-items
$(".menu li").removeClass("hover");
$(".menu li h2.parent").unbind('click').bind('click', function(e) {
// must be attached to anchor element to prevent bubbling
e.preventDefault();
if (e.stopPropagation){
e.stopPropagation();
}
else if(window.event){
window.event.cancelBubble=true;
}
//close any sibling menu items
$(this).parent().siblings('li').removeClass("hover");
$(this).parent().siblings('li').removeClass("keyhover");
//handle click request
if (!$(this).parent().hasClass("hover")) {
$(this).parent().addClass("hover");
//console.log('hover added');
} else {
$(this).parent().removeClass("hover");
$(this).parent().removeClass("keyhover");
//console.log('hover removed');
}
});
}
}
//initialize the menu
ww = viewportSize.getWidth();
adjustMenu();
});
最終我只是想父母切換點擊或觸摸開放,都是鏈接。試圖用幾種不同的方式暗示這個代碼,沒有運氣......任何其他想法? – frshjb373
用你的代碼嘗試了這個函數,它工作。 – smdsgn
也許我沒有把腳本中的函數放在正確的位置。我也改變了css的建議,但沒有運氣。您對這個響應式菜單的功能應該有更好的想法嗎? – frshjb373