Показать сообщение отдельно
  #3 (permalink)  
Старый 08.01.2011, 21:31
Новичок на форуме
Отправить личное сообщение для kostysh Посмотреть профиль Найти все сообщения от kostysh
 
Регистрация: 21.11.2010
Сообщений: 9

есть решение
Сообщение от Matre Посмотреть сообщение
клик на скролле нельзя зафиксировать некак
разве что событие onscroll если пользователь прокручивает скрол
так же можно использовать такие плагины как jscrollpane если есть вомзожнгость,на них можно поймать mousedown/mouseup
в общем, свою проблему я решил. способ определить момент клика на скролбар есть. Решается элегантно, хотя и похоже на костыль ))

суть решения такова: у нас всегда есть возможность в динамике определить - появились скролы или нет - это мы можем узнать по разнице таких переменных как offsetHeight и clientHeight (по высоте) и
offsetWidth и clientWidth (по ширине). По сути разница будет равняться ширине полоски скрола. То есть даже если вы через стили измените ширину этих полосок - то метод сработает. Далее мы из события берем координаты мышки и узнаем находится ли она над скролом или нет.
В моем случае этого хватило. Я узнаю где мышка и если она над скролом, то я игнорирую событие... то есть теперь мне вообще не нужно ждать mouseup, ведь я знаю что его не будет

Код примера на JQuery такой:

$('#test').mousedown(function() {
   var rightscroll = this.offsetWidth-this.clientWidth;
   var bottomscroll = this.offsetHeight-this.clientHeight;
   var mouseX = event.pageX;
   var mouseY = event.pageY;

   if (rightscroll > 0
      && (mouseX >= this.clientWidth && mouseX <= this.offsetWidth)) {
        return true;//if mousedown on right scroll bar
   }

   if (bottomscroll > 0
      && (mouseY >= this.clientHeight && mouseY <= this.offsetHeight)) {
        return true;//if mousedown on bottom scroll bar
   }
   console.log('MouseDown Fired!');
   $(this).mouseup(function() {
      console.log('MouseUp Fired!');
   });

});
Ответить с цитированием