バージョン 1. 以下の編集バージョン
これは私が最初に持っていたものの非常に基本的な表現です。これより短くすることはできないようです。コードの負荷については申し訳ありません。問題がどこにあるのかコメントしました。
拡張フィドル: http://jsfiddle.net/BramVanroy/tKL8E/53/
ご覧のとおり、ホバーできるメニューがあります。通常のビュー (水平メニュー) では、リンクのタイトルを表すツールチップが表示されます (基本的に、変更されたツールチップ)。ウィンドウのサイズを 800 未満に変更すると、メニューが垂直になります (メディア クエリ)。問題は、if 関数内で呼び出された関数がまだ機能することです。変更されたツールチップは (標準のツールチップの代わりに) 表示され、アニメーション化され続け、矢印はまだ配置されています。
function triangleMenu() {
var wW = $(window).width();
if (wW > 800) {
// Get rid of [title]'s and put them in data unless it has sub-items
$("li:not(.has-sub-menu) > a[title]").each(function () {
var $this = $(this);
$this.data("title", $this.attr("title"));
$this.removeAttr("title");
});
// tooltip positioning on hover and overlay fade on all li's
$("nav li").hover(function () {
// Bunch of vars
if (
($this.parent("ul:not(.sub-menu)").length || ($this.parent("ul.sub-menu").length && $this.is(":last-child"))) && !$this.hasClass("has-sub-menu")) {
tooltip.stop(true).css("right", "auto").text(title).animate({
"left": posL - (tooltip.width() / 2),
"top": posT + $this.offset().top + 20
}, 300).fadeTo(200, 1);
} else if (!$this.is(":last-child") && $this.parent("ul.sub-menu").length) {
var condition = offL > ((wW / 2) - $this.width()),
properties = {},
cssProp = {};
tooltip.stop(true).text(title);
if (condition) {
properties = {
"left": (offL - tooltip.width() - 30)
};
} else {
properties = {
"left": (offL + $this.width() + 25)
};
}
$.extend(properties, {
"top": ($this.offset().top + (posT / 2) - (tooltip.height() / 2))
});
tooltip.animate(properties, 300).fadeTo(200, 1); // SO TOOLTIP ANIMATES, BUT ONLY WHEN WINDOW WIDTH EXCEEDS 800
}
},function () {
});
} else { // IF WINDOW IS TIGHTER THAN 800 PX
// Put data back
$("li:not(.has-sub-menu) > a").each(function () {
var $this = $(this),
title = $this.data("title");
$this.attr("title", title);
});
}
}
triangleMenu();
$(window).resize(function () {
triangleMenu();
});
繰り返しますが、この例が広範で申し訳ありませんが、動作しない機能を失わずに、これ以上削減することはまったく不可能です。
新機能: バージョン 2
いくつかの助けと多くのテストと砂糖の過剰な飲み物で、私は「メインメニュー」が機能するようになりました. ただし、サイズ変更された (モバイル/レスポンシブ) メニューは機能しません。
小さいメニューにサイズ変更する場合 (小さい、大きい、小さいの 2 回サイズ変更する必要がある場合があります)、サブ メニューを持つアイテムをクリックして開くことができるはずですが、これは機能しません。li をクリックすると、サブアイテムに一連のインライン スタイルが表示されますが、それらがどこから来たのかわかりません!
overflow: hidden; display: none; height: 159px; padding-top: 0px; margin-top: -2px; padding-bottom: 0px; margin-bottom: 0px;
メニューが表示されなくなったと思いますが、原因がわかりません。