2012-01-11 3 views
0

Другой вопрос на iScroll 4. Я установил demo in JSFiddle.Прокрутите div до последнего div на mousedown

Я хочу прокрутить div по адресу mousedown. Он должен прокрутиться до конца:

  • непрерывно;
  • без каких-либо помех;
  • со статической скоростью;

До тех пор пока он не достигнет последних div, или я сделаю mouseup посередине.

Можно ли достичь этого?

ответ

0

Проверить эту скрипку: http://jsfiddle.net/z2YWZ/2/

Существует еще одна проблема. Он не останавливается, когда он достигает конца. iScroll использует CSS translate, чтобы выполнить прокрутку, и я не смог найти способ получить текущую форму перевода. В настоящее время ищет решение для этого.

UPDATE

iScroll имеет опцию useTransform, с помощью которого мы можем попросить его не использовать перевод и вместо того, чтобы использовать CSS свойство влево для прокрутки. Таким образом, мы сможем легко определить, достигнут ли его конец (в любом случае). Чтобы использовать, просто установите useTransform: false во время инициализации iScroll.

UPDATE 2

Проверить эту скрипку: http://jsfiddle.net/z2YWZ/12/

+0

Я проверил демонстрацию, которую вы сделали.Он работает очень хорошо, за исключением того, что вы упомянули, и еще одна вещь, которую я заметил, находится на mousedown, она выполняет свою работу, но при немедленном нажатии и выходе (один клик) есть что-то, что нужно сделать, чтобы только один div перемещался или вне. У меня фиксированная ширина div. Так что вы можете посмотреть, что работает один раз. Здесь происходит что-то необычное с одним щелчком мыши. – user850234

+0

Если вы посмотрите на исходный код iscroll, вы увидите, что есть опция 'useTransform', с помощью которой вы можете попросить его не использовать translate и вместо этого использовать свойство left left для прокрутки. Таким образом, мы сможем легко определить, достигнут ли его конец (в любом случае). – techfoobar

+0

Я попробовал метод, который вы предложили. Есть ли способ получить текущую левую позицию в функции перемещения iscroll4 во время прокрутки. В конце мы можем получить левое значение, но при прокрутке, как понять, что скроллер достиг конца, и его нужно остановить, пока мы не получим левое значение прокрутки в функции перемещения iscroll. – user850234

0

Вы можете проверить это решение: http://jsfiddle.net/ugeU3/3

HTML:

<div id="click">Element to click on</div> 

ЯШИ:

jQuery("#click").bind('mousedown', function(){ 
    intInterval=setInterval(function(){ 
      myScroll.scrollTo(25, 0, 800, true); 
    },30); 
}); 
jQuery("#click").bind('mouseup', function(){ 
    intInterval=window.clearInterval(intInterval); 
}); 

вы можете изменить значение времени для достижения ваших скоростно-предпочтений. Надеюсь, это поможет.

+0

Ну, даже у этого есть проблема, о которой я упомянул, мой ответ (не останавливается в конце). Кроме того, поскольку мышь обрабатывается самим триггерным элементом, если пользователь по ошибке отбрасывает мышь, прокрутка не может быть остановлена ​​после этого. – techfoobar

0

Я изменил @techfoobar код и сделать что-то вроде этого, который как свитки непрерывно до конца на MouseDown и перемещает один DIV или на один клик. Фрагмент кода:

 var scrolling=false; 
     var scrollTimer=-1; 
     $('#next').bind('mousedown',function() { 
      scrolling = true; 
      scrollTimer = setInterval(function() { 
       scrollDivRight(); 
      }, 100); 
      return false; 
     }); 
     $('#next').bind('mouseup',function() { 
      scrolling = false; 
      clearInterval(scrollTimer); 
      return false; 
     }); 
     $('#next').bind('mouseout',function() { /*For smoother effect and also prevent if any previous delay (eg. 100ms)*/ 
      scrolling = false; 
      clearInterval(scrollTimer); 
      return false; 
     }); 
     scrollDivRight:function(){ 
      if(!scrolling) return false; 
      myScroll.scrollTo(177, 0, 400, true);  
     } 

Просьба предложить, если есть что-то лучше, чем это. Конечно, вопрос, упомянутый в его ответе, остался нерешенным.

Смежные вопросы