Не вижу смысла не использовать то что есть встроенное в браузер, причем данные события являются стандартными и не использование более быстрых нативных возможносей браузера я считаю глупо.
|
Я бы предложил использовать делегирование и вешать обработчики на родителя (лучше прямо на body)
|
Цитата:
|
Цитата:
<style>
.show {
background: lightgreen;
margin: 40px;
}
.div {
background: lightgrey;
padding: 2px;
}
</style>
<div class="show">show</div>
<div class="div">
<a href="#">link1</a><br>
<a href="#">link2</a><br>
<a href="#">link3</a><br>
</div>
<script>
window.onload = function () {
document.body.onmouseout = function (e) {
e = e || event;
var rt = e.relatedTarget || e.toElement;
var target = e.target || e.srcElement;
if (target.className == 'div' && rt.parentNode.className != 'div') {
target.style.display = 'none';
}
}
document.onmouseover = function (e) {
e = e || event;
var target = e.target || e.srcElement;
if (target.className == 'show') {
target.parentNode.children[1].style.display = 'block';
}
}
}
</script>
|
Цитата:
Чот не наблюдаю эффекта - скорее всего внедрена ссылка вне данного div
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Cообщения</title>
</head>
<body align=center>
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>
<style type="text/css">
#LinkInserTium {
text-align:center;
margin:0 auto;
height:100px;
width:100px;
border:1px red solid;
}
#LinkInserTium:hover {
background-color:#0000CC;
}
#LinkInserTium a {
padding:0 4px;
background-color:#F7F7F7;
border:1px red solid;
}
#hover {
display:none;
}
</style>
<div id=LinkInserTium><br />
<a href="/sdfsdf/">ПриветБ</a>
</div>
<span id=hover>Мышь в DIV</span><span id=out>Мышь ушла с Блока</span>
<script type="text/javascript">
$("#LinkInserTium").mouseover(function(){
$("#hover").show();$("#out").hide();
}).mouseout(function(){
$("#hover").hide();$("#out").show();
});
</script>
</body>
</html>
|
Deff,
на таком примере и не заметишь, потому как браузер просто не успевает внести изменения в ДОМ, как снова нужно вернуть обратное, это заметно на таком примере:
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Cообщения</title>
</head>
<body align=center>
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>
<style type="text/css">
#LinkInserTium {
text-align:center;
margin:0 auto;
height:100px;
width:100px;
border:1px red solid;
}
#LinkInserTium:hover {
background-color:#0000CC;
}
#LinkInserTium a {
padding:0 4px;
background-color:#F7F7F7;
border:1px red solid;
}
#hover {
display:none;
}
</style>
<div id=LinkInserTium><br />
<a href="/sdfsdf/">ПриветБ</a>
</div>
<span id=hover>Мышь в DIV</span><span id=out>Мышь ушла с Блока</span>
<script type="text/javascript">
$("#LinkInserTium").mouseover(function(){
document.body.appendChild(document.createTextNode('over|'));
}).mouseout(function(){
document.body.appendChild(document.createTextNode('out|'));
});
</script>
</body>
</html>
вот тут при наведении на ссылку сработает out а потом снова over, вот именно в этом промежутке твое решение и не заметно, так как при out просто не успевает отрисоваться, как снова нужно опять отрисовывать over |
devote,
А поставь фон по hover(как у меня) и попробуй выводить и цвет фона ( если сss цвета не меняецо - мож его отслеживать на переходах ? |
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Cообщения</title>
</head>
<body align=center>
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>
<style type="text/css">
#LinkInserTium {
text-align:center;
margin:0 auto;
height:100px;
width:100px;
border:1px red solid;
}
#LinkInserTium:hover {
background-color:#0000CC;
}
#LinkInserTium a {
padding:0 4px;
background-color:#F7F7F7;
border:1px red solid;
}
#hover {
display:none;
}
</style>
<div id=LinkInserTium><br />
<a href="/sdfsdf/">ПриветБ</a>
</div>
<span id=hover>Мышь в DIV</span><span id=out>Мышь ушла с Блока</span>
<script type="text/javascript">
$("#LinkInserTium").mouseover(function(){
var a=$(this).css("background-color")
document.body.appendChild(document.createTextNode(a+'over|'));
}).mouseout(function(){
var a=$(this).css("background-color")
document.body.appendChild(document.createTextNode(a+'out|'));
});
</script>
</body>
</html>
Цвет не меняется при данных пертурбациях - так шо он флаг - если цвет тот жа что и при hover - из .mouseout - return false; |
devote,
:) A а вообщем Ти прав .mouseleave/.mouseenter на JQ - работает и в ИЕ
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Cообщения</title>
</head>
<body align=center>
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>
<style type="text/css">
#LinkInserTium {
text-align:center;
margin:0 auto;
height:100px;
width:100px;
border:1px red solid;
}
#LinkInserTium:hover {
background-color:#0000CC;
}
#LinkInserTium a {
padding:0 4px;
background-color:#F7F7F7;
border:1px red solid;
}
#hover {
display:none;
}
</style>
<div id=LinkInserTium><br />
<a href="/sdfsdf/">ПриветБ</a>
</div>
<span id=hover>Мышь в DIV</span><span id=out>Мышь ушла с Блока</span>
<script type="text/javascript">
$("#LinkInserTium").mouseenter(function(){
var a=$(this).css("background-color")
document.body.appendChild(document.createTextNode(a+'over|'));
}).mouseleave(function(){
var a=$(this).css("background-color")
document.body.appendChild(document.createTextNode(a+'out|'));
});
</script>
</body>
</html>
|
Deff,
ну теперь понял разницу в событиях? mouseover, mouseout работают совсем не так как mouseenter, mouseleave... И дело совсем не в ощутимости изменения цвета иль еще чего.. а втом что при сожании на mouseenter обработчика, я знаю что оно будет вызвано лишь раз для элемента, и не произайдет делегирования, то есть оно не будет срабатывать если я мышь держу в его приделах даже на дочерних элементах... что не скажешь о событии mouseover, которое будет срабатывать даже если я не уходил с элемента за его пределы, а всего лишь перешел на дочерний элемент, это и есть делегирование.. когда событие родителя срабатывает по цепи захвата/всплытия |
| Часовой пояс GMT +3, время: 15:51. |