わかりましたので、必要なものはかなり簡単です。
いくつかのドロップダウン メニューを含むナビゲーション バーを ( を使用して) セットアップしましたが、正常class="dropdown-toggle" data-toggle="dropdown"
に動作します。
問題はそれが機能するということですonClick
" onHover
"。
これを行う組み込みの方法はありますか?
わかりましたので、必要なものはかなり簡単です。
いくつかのドロップダウン メニューを含むナビゲーション バーを ( を使用して) セットアップしましたが、正常class="dropdown-toggle" data-toggle="dropdown"
に動作します。
問題はそれが機能するということですonClick
" onHover
"。
これを行う組み込みの方法はありますか?
最も簡単な解決策は CSS です。のようなものを追加します...
.dropdown:hover .dropdown-menu {
display: block;
margin-top: 0; // remove the gap so it doesn't close
}
CSSの場合、それをクリックすると気が狂います。これは私が使用しているコードです。モバイル ビューでも何も変更しません。
$('.dropdown').mouseenter(function(){
if(!$('.navbar-toggle').is(':visible')) { // disable for mobile view
if(!$(this).hasClass('open')) { // Keeps it open when hover it again
$('.dropdown-toggle', this).trigger('click');
}
}
});
したがって、次のコードがあります。
<a class="dropdown-toggle" data-toggle="dropdown">Show menu</a>
<ul class="dropdown-menu" role="menu">
<li>Link 1</li>
<li>Link 2</li>
<li>Link 3</li>
</ul>
通常はクリックイベントで動作し、ホバーイベントで動作させたい. これは非常に簡単です。次の javascript/jquery コードを使用するだけです。
$(document).ready(function () {
$('.dropdown-toggle').mouseover(function() {
$('.dropdown-menu').show();
})
$('.dropdown-toggle').mouseout(function() {
t = setTimeout(function() {
$('.dropdown-menu').hide();
}, 100);
$('.dropdown-menu').on('mouseenter', function() {
$('.dropdown-menu').show();
clearTimeout(t);
}).on('mouseleave', function() {
$('.dropdown-menu').hide();
})
})
})
これは非常にうまく機能します。ここに説明があります。ボタンとメニューがあります。ボタンをホバーするとメニューが表示され、ボタンからマウスアウトすると 100ms 後にメニューが非表示になります。なぜ私がそれを使用するのか疑問に思っているのは、カーソルをボタンからメニューにドラッグするのに時間がかかるからです。メニューにいると時間がリセットされ、何度でもそこにとどまることができます。メニューを終了すると、タイムアウトなしですぐにメニューが非表示になります。
私はこのコードを多くのプロジェクトで使用してきました。使用中に問題が発生した場合は、遠慮なく質問してください。
ナビゲーション項目にカーソルを合わせて、ホバー時にアクティブになることを確認します。 http://cameronspear.com/demos/twitter-bootstrap-hover-dropdown/#
これは、いくつかのjQueryでホバー時にドロップダウンにするために使用するものです
$(document).ready(function () {
$('.navbar-default .navbar-nav > li.dropdown').hover(function () {
$('ul.dropdown-menu', this).stop(true, true).slideDown('fast');
$(this).addClass('open');
}, function () {
$('ul.dropdown-menu', this).stop(true, true).slideUp('fast');
$(this).removeClass('open');
});
});
dropdown-toggle
ドロップダウン ホバー機能用の適切なプラグインを公開しました。このプラグインでは、要素をクリックしたときに何が起こるかを定義することもできます。
https://github.com/istvan-ujjmeszaros/bootstrap-dropdown-hover
以前に存在したすべてのソリューションに問題がありました。単純な CSS は の.open
クラスを使用していない.dropdown
ため、ドロップダウンが表示されている場合、ドロップダウン トグル要素にフィードバックはありません。
js のものは をクリックすると干渉する.dropdown-toggle
ため、ホバー時にドロップダウンが表示され、開いているドロップダウンをクリックすると非表示になり、マウスを離すとドロップダウンが再び表示されます。一部の js ソリューションは iOS との互換性を損ない、一部のプラグインはタッチ イベントをサポートしている最新のデスクトップ ブラウザーで動作しません。
そのため、ハックなしで、標準の Bootstrap JavaScript API のみを使用してこれらの問題をすべて防止するBootstrap Dropdown Hoverプラグインを作成しました。
これは、モバイルデバイスを使用していない場合にのみナビゲーションバーをホバーします。モバイルデバイスではナビゲーションをホバーするとうまく機能しないことがわかったからです。
$( document ).ready(function() {
$( 'ul.nav li.dropdown' ).hover(function() {
// you could also use this condition: $( window ).width() >= 768
if ($('.navbar-toggle').css('display') === 'none'
&& false === ('ontouchstart' in document)) {
$( '.dropdown-toggle', this ).trigger( 'click' );
}
}, function() {
if ($('.navbar-toggle').css('display') === 'none'
&& false === ('ontouchstart' in document)) {
$( '.dropdown-toggle', this ).trigger( 'click' );
}
});
});
これは、ブートストラップ用の独自のホバー クラスを作成するのに役立ちます。
CSS:
/* Hover dropdown */
.hover_drop_down.input-group-btn ul.dropdown-menu{margin-top: 0px;}/*To avoid unwanted close*/
.hover_drop_down.btn-group ul.dropdown-menu{margin-top:2px;}/*To avoid unwanted close*/
.hover_drop_down:hover ul.dropdown-menu{
display: block;
}
マージンは不要なクローズを避けるために設定され、オプションです。
HTML:
<div class="btn-group hover_drop_down">
<button type="button" class="btn btn-default" data-toggle="dropdown"></button>
<ul class="dropdown-menu" role="menu">
...
</ul>
</div>
onclick open を削除する場合は、ボタン属性data-toggle="dropdown"を削除することを忘れないでください。これは、入力がドロップダウンに追加されている場合にも機能します。
click
でイベントをトリガーするとhover
、小さなエラーが発生します。If mouse-in
and then はclick
その逆の効果を生み出します。それopens
はいつmouse-out
、close
いつmouse-in
。より良い解決策:
$('.dropdown').hover(function() {
if (!($(this).hasClass('open'))) {
$('.dropdown-toggle', this).trigger('click');
}
}, function() {
if ($(this).hasClass('open')) {
$('.dropdown-toggle', this).trigger('click');
}
});
$('.navbar .dropdown').hover(function() {
$(this).find('.dropdown-menu').first().stop(true, true).slideDown(150);
}, function() {
$(this).find('.dropdown-menu').first().stop(true, true).slideUp(105)
});
この機能は、Jquery を使用して実装します。
$('.dropdown').on('mouseover', function(){
$(this).addClass('show');
$('.dropdown-menu').addClass('show');
$('.dropdown-toggle').attr('aria-expanded', 'true');
});
$('.dropdown').on('mouseout', function(){
$(this).removeClass('show');
$('.dropdown-menu').removeClass('show');
$('.dropdown-toggle').attr('aria-expanded', 'false');
});