Onmouseover + overflow:hidden
1172 сообщения
#14 лет назад
<style>
.row {
width:300px;
height:24px;
border:1px solid black;
overflow:hidden;
}
</style>
<div id="a1" class="row" onmousedown="Select('a1')" onmouseover="Over('a1')"></div>
<div id="a2" class="row" onmousedown="Select('a2')" onmouseover="Over('a2')"></div>
<div id="a3" class="row" onmousedown="Select('a3')" onmouseover="Over('a3')"></div>
<div id="a4" class="row" onmousedown="Select('a4')" onmouseover="Over('a4')"></div>
<div id="a5" class="row" onmousedown="Select('a5')" onmouseover="Over('a5')"></div>
<script>
var mousedown=false;
function Select(id) {
mousedown=true;
document.getElementById(id).style.backgroundColor='#000';
}
function Over(id) {
if(mousedown)
document.getElementById(id).style.backgroundColor='#000';
}
document.onmouseup=function() {mousedown=false}
</script>
Вот при таком варианте нажатие на любом элементе и перемещение курсора на другие, не отпуская кнопку, работает неправильно. Отмечается только элемент, на который нажали изначально. Но стоит убрать из стиля overflow:hidden и все работает замечательно.
Как убрать эту баго-фичу? От overflow избавляться не вариант, т.к. контент внутри может быть любой длины.
Проблема обнаружена в Firefox 3.6.13 под Windows и Linux.
16382 сообщения
#14 лет назад
В 3.6.6 под виндой тоже самое. На onmousemove тоже не реагирует, на jquery те же самые проблемы. Плохо дело. Интересно если решится.
16382 сообщения
#14 лет назад
Разве что костыль слепить для обрезания контента до необходимой длины и убрать overflow:hidden;
584 сообщения
#14 лет назад
Прикольно 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<style>
.row {
width:300px;
height:24px;
border:1px solid black;
overflow:hidden;
}
</style>
</head>
<body>
<style>
.row {
width:300px;
height:24px;
border:1px solid black;
overflow:hidden;
}
</style>
<script>
for (var i=0; i<5; i++)
document.write('<div id="a'+i+'" class="row" onmouseover="Over(event, \'a'+i+'\')" onmousemove="Over(event, \'a'+i+'\')" onmousedown="Select(event, \'a'+i+'\')">nbcv '+i+'</div>');
</script>
<div id="inf"></div>
<script>
var mousedown=false;
function Select(event, id) {
document.getElementById('inf').innerHTML = id+' - '+event.type+' ';
mousedown=true;
document.getElementById(id).style.backgroundColor='#000';
}
function Over(event,id) {
document.getElementById('inf').innerHTML = id+' - '+event.type+' ';
if(mousedown)
document.getElementById(id).style.backgroundColor='#000';
}
document.onmouseup=function() {mousedown=false}
</script>
</body>
</html>
16382 сообщения
#14 лет назад
Цитата ("Lisio"):Засабмитил баг в мозиллу
А толку то? Текущая же версия не станет работать правильно от этого.
Кстати, там каментит кто-то уже.
Lisio, как тебе удается все это вылавливать? То php, то js... везунчик?

1172 сообщения
#14 лет назад
Везунчик? С трудом можно подсчитать время, потраченное на выявляение этой зависимости. И не понятна пока еще позиция создателей Gecko, баг это для них или фича.К сожалению, для меня в этой задаче overflow гораздо ценнее мультиселекта мышью. Костыль пока подобрать не могу.
16382 сообщения
#14 лет назад
Цитата ("Lisio"):Везунчик?
Шутю я, шутю.
Цитата ("Lisio"):
баг это для них или фича.
ИМХО баг конечно. Границы блока у нас есть и она у нас даже обрисована, за границу блока мы выходим, мышь оказывается в пределах другого блока, а событие при этом не генерится. Какая ж это может быть фича?
Кстати, а может отслеживать движения мыши? Она лочится совсем или это баг именно событий?
1172 сообщения
#14 лет назад
Так SField же выложил код с отслеживанием, там мышь именно лочится.
584 сообщения
#14 лет назад
Цитата ("Lisio"):Вот в том и фишка, что при overflow элемент лочит на себя мышь.
Причем не только overflow, а все что кроме visible: overflow, auto, scroll и hidden