これが1つの可能な解決策を備えたjsFiddleです。jQueryの.hover()
メソッドを使用して、テーブルの外側の要素をアニメーション化し、テーブルの内側に含まれるコンテンツで埋めています。このように、ポップアップ要素はテーブルの境界に制限されません。
jQueryコードは次のとおりです。
$(function() {
$(".hover_over").hover( function() {
hovDiv = $(this);
showDiv = $(".show_hover");
showDiv.html(hovDiv.children("div").html());
showDiv.css("top", hovDiv.offset().top)
showDiv.css("left", hovDiv.offset().left + hovDiv.width()).show();
}, function() {
$(".show_hover").hide();
});
});
そしてHTML:
<div class="theTable">
<div class="hover_over">1
<div>I'm hidden! 1</div>
</div>
<div class="hover_over">2
<div>I'm hidden! 2</div>
</div>
<div class="hover_over">3
<div>I'm hidden! 3</div>
</div>
<div class="hover_over">4
<div>I'm hidden! 4</div>
</div>
<div class="hover_over">5
<div>I'm hidden! 5</div>
</div>
</div>
<div class="show_hover"></div>
そしてCSS:
.show_hover {
display:none;
position:absolute;
background-color:black;
width:100px;
height:20px;
font-size:14px;
color:white;
}
.hover_over div { display:none; }
アップデート
あなたが尋ねたので、私はこれをプレーンなJavaScriptで動作させることにしました。読むのは簡単ではありませんが、同じ考え方が当てはまります。ポップアップdivをテーブルの外に移動し、目的のコンテンツを動的に追加しonmouseover
、onmouseout
イベントハンドラーを使用して配置します。
これが新しいjsFiddleです。
そして、ここに関連するコードがあります:
Javascript
(function() {
function hoverIn() {
var hovDiv = this;
var showDiv = document.getElementById("show_hover");
showDiv.innerHTML = hovDiv.children[0].innerHTML;
showDiv.className = "see";
var newTop = hovDiv.offsetTop + hovDiv.offsetParent.offsetTop + hovDiv.offsetParent.offsetParent.offsetTop;
showDiv.style.top = "" + newTop + "px";
var newLeft = hovDiv.offsetLeft + hovDiv.offsetParent.offsetLeft + hovDiv.offsetParent.offsetParent.offsetLeft + hovDiv.clientWidth;
showDiv.style.left = "" + newLeft + "px";
};
function hoverOut() {
document.getElementById("show_hover").className = "";
};
var hoverDivs = document.getElementsByClassName("hoverdiv");
for(var i = 0; i < hoverDivs.length; i++)
{
hoverDivs[i].onmouseover = hoverIn;
hoverDivs[i].onmouseout = hoverOut;
}
})();
CSS
#show_hover
{
display:none;
position:absolute;
top:0;
left:0;
}
#show_hover.see {
display:block;
background-color:green;
width:400px;
height:80px;
position:absolute;
top:20px;
left:20px;
}
アップデート2
この答えはめちゃくちゃ長くなっています。これが新しいjsFiddleです。この更新により、表示されているdivにカーソルを合わせて、内部のオブジェクトを操作できます。hoverIntent jQueryプラグインの背後にある基本的な考え方を利用しました。これはonmouseout
、呼び出しの背後にハンドラーを配置setTimeout
して、マウスがポップアップが消える前に0.5秒移動できるようにすることです。それは少し気難しいので、あなたはそれがあなたが望むことをするまで待ち時間で遊ぶかもしれません。
また、マウスが特定の瞬間にどこにあるかを確認し、それから表示/非表示の動作をトリガーする場合は、このStackOverflowの質問を参照してください。
そうは言っても、アップデートの重要な部分は次のとおりです。
var mouseInShowHover = false;
var showDiv = document.getElementById("show_hover");
showDiv.onmouseover = function() { mouseInShowHover = true; }
showDiv.onmouseout = function() {
mouseInShowHover = false;
showDiv.className = "";
}
function hoverOut() {
setTimeout( function() {
if( !mouseInShowHover )
showDiv.className = "";
}, 500);
};