Андрей К.
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;
Андрей К.
1172 сообщения
#14 лет назад
Засабмитил баг в мозиллу:
Себастьян Ф.
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>
Андрей К.
1172 сообщения
#14 лет назад
Вот в том и фишка, что при overflow элемент лочит на себя мышь.
Роман Беляев
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
Роман Беляев
16382 сообщения
#14 лет назад
Точно. Не всматривался в его код.