Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   свой scrollbar на js (https://javascript.ru/forum/events/36664-svojj-scrollbar-na-js.html)

simple 23.03.2013 23:34

свой scrollbar на js
 
Вобщем делаю свой скролл на js, со стрелками и ползунком, есть функция назовем ее scrollPage которая запускается по нажатию одной из стрелок, вверх или вниз, и если стрелка нажата и не отпускается 500 ms то запускается таймер который выполняет данную функцию покуда юзер не отпустит клавишу мыши или не отведет курсор от кнопки, вобщем аля виндоус. Набросал на скорую руку вот такой код.

var timeoutID, intervalID;
 arrowBottom.onmousedown = function () {
  scrollPage();
  timeoutID = setTimeout(function () {
     intervalID = setInterval(function () {
       scrollPage();}, 50);
  }, 500);
};
arrowBottom.onmouseup = function () {
   clearTimeout(timeoutID);
   clearInterval(intervalID);
};

Собственно все работает как и хотелось, вопрос только по данной реализации есть, слышал что кол-во вызовов функции ограничено, значит и скролл мой будет ограничен? Ну и еще по опримизации советы если можно хотелось бы услышать, может есть лучше вариант реализации данного функционала? Спасибо.

dmitriymar 24.03.2013 00:34

Цитата:

Сообщение от simple
Собственно все работает как и хотелось, вопрос только по данной реализации есть, слышал что кол-во вызовов функции ограничено, значит и скролл мой будет ограничен?

А это то причём? таймауты разрывают поток выполнения кода -в стеке ничего не скапливается .

Цитата:

Сообщение от simple
Ну и еще по опримизации советы если можно хотелось бы услышать, может есть лучше вариант реализации данного функционала?

Выбросить этот код вобще . Вложенные таймеры -это не по феншуй в принципе -это раз. -хотя в этом коде и вреда от них не видно . Но и кодом 10 строк назвать нельзя.

А два -подобные вещи в шаблон модуль вкладываются . И подобный функционал пишется с учётом того , что он вью будет изменять при подключении

Цитата:

Сообщение от simple
и если стрелка нажата и не отпускается 500 ms

Злостно. Ничего что по феншуй, человек должен увидеть реакцию на своё действие в течении 100 мс? Итого реакция -одиночная подвижка первая . След подвижка не через 500 а макс через 100 мс

danik.js 24.03.2013 08:06

К слову на харбе (относительно) недавно выкладывали реализацию скроллбара, самую православную и нативную (сам я не тестил пока). Правда без стрелочек.

simple 24.03.2013 19:28

Цитата:

Сообщение от dmitriymar (Сообщение 242263)
Злостно. Ничего что по феншуй, человек должен увидеть реакцию на своё действие в течении 100 мс? Итого реакция -одиночная подвижка первая . След подвижка не через 500 а макс через 100 мс

все нет так, если нажимать на стрелку n кол-во раз то будут подвижки..а если зажать кнопку и не отпускать...(задержка в 500ms нужна что бы отловить это событие а не запускать ее при каждом клики)... то включается setInterval который выполняет прокрутку автоматом уже...неужели вы не видели как работает прокрутка в window? Мой код делает тоже самое :)


Часовой пояс GMT +3, время: 09:39.