Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.02.2012, 12:09
Интересующийся
Отправить личное сообщение для Vladimir_Kl Посмотреть профиль Найти все сообщения от Vladimir_Kl
 
Регистрация: 21.03.2011
Сообщений: 23

Тач горизонтальная прокрутка блока
Все доброго времени суток!

Имеется блок с горизонтальным скролом. Та вот задача внедрить в этот блок горизонтальную тач прокрутку, чтобы на сенсорных экранах можно было пальцем прокручивать, а не кликая по полосе скрола.

Первый раз с этим столкнулся.

Нужна помощь!

Заранее спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 23.02.2012, 13:18
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

ну а как насчёт готовых решений, jquery mobile к примеру или http://www.jqtouch.com/.
ну или далёких от jquery http://www.lungojs.com
Вот это не предлагаю, ибо для приложений, а не для плагина

Простая реализация на jQuery своими силами, не так проста))
пиши плагин который позволяет делать прокрутку мышью, по логике должно прокатить и для пальца )))
три события mouseup, mousedown и mousemove тебе в помощь. Ну и .scrollLeft (x) тоже.

конечно тебе может понадобится прокрутка с затуханием. Тобишь должно крутится какоето время от сильного толчка.

значит потребуются вот такие формулы из курса начальных классов школы))
время прокрутки = время отпускания кнопки мыши-время нажатия.
Расстояние прокрутки = Math.abs(координата нажатия мыши - координата отпускания кнопки мыши )
Скорость прокрутки = Расстояние прокрутки/ время прокрутки

теперь нужно определить нужна ли нам прокрутка по энерции. Тобиш крутанули сильно и содержимое прокрутилось на две страницы вперёд. Определять ты это можешь по времни допустим менее секунды, по скорости, или по нескольким параметрам сразу. Как будет красиво выясниш только эксперементально.

Теперь если нам всётаки нужна такая прокрутка по энерции.
Введём что-то вроде силы сопротивления.
Сила сопротивления = 0.7 к примеру.

и внутри функции в которой будет происходить скроллинг после отпускания мыши/пальца пишем что-то вроде
function f(){
      // здесь напишеш 
      скорость прокрутки =скорость прокрутки*сила сопротивления
      смещаем скроллер на скорость прокрутки
      if(скорость прокрутки > критического низкого значения) setTimeout(f);
}

критическое значение нам нужно для того чтобы не высчитывать очень низкие скорости к примеру. 0.0000323 пикселя. как стало ниже одного пикселя, думаю можно смело останавливать.

Решение придумал только сейчас, отродясь его не проверял. Но делать бы начал с этого решая проблемы по мере их возникновения.

Удачи ))))

upd:
я не учёл ёщё тот факт что пользователь может не убирая палец несколько раз менять своё направление и останавливать движение. Значит точка отсчёта начала движения должна сбрасываться каждый раз при изменении вектора движения и в случае остановки. Это придётся отслеживать в mouseMove а затем изменять время нажатия, и координату нажатия на текущии параметры.

с вектором всё понятно если от старой координаты отнять новую, будут получаться два типа чисел при движении влево положительные при движении вправо отрицательные, значит нам нужно просто сохранять знак а потом сравнивать новый и старый знаки. Знак изменился изменилось и направление движения мыши.

хм А как определить факт остановки?
Вероятно нужно замерять время между двумя mousemove, и если промежуток в этот раз окажется слишком большим значит была остановка. Как то так пожалуй.

Походу тюнинг будет дольше самой разработки. Тут целая куча коэффициентов получается, их нужно будет объявить в самом начале плагина чтобы затем было удобно подбирать, не в коем случае не объявлять коэффициенты в самом теле.
Лично я бы, не поленился, сделать отдельную форму для параметров, и тюнинговал бы прямо на странице не лазя в код. Времени на создание пусть даже час, зато отладил бы раза в три быстрее.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 23.02.2012 в 19:30.
Ответить с цитированием
  #3 (permalink)  
Старый 23.02.2012, 15:37
Интересующийся
Отправить личное сообщение для Vladimir_Kl Посмотреть профиль Найти все сообщения от Vladimir_Kl
 
Регистрация: 21.03.2011
Сообщений: 23

Спасибо, буду пробовать!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Горизонтальная прокрутка daMage (X)HTML/CSS 6 12.02.2012 15:28
прокрутка блока псевдочеловек jQuery 2 23.05.2011 18:15
Два блока div разъезжаются при скроллинге окна браузера. call007 jQuery 0 03.04.2011 16:21
горизонтальная прокрутка блока dmitrio Элементы интерфейса 5 15.10.2010 23:41
Горизонтальная прокрутка в gridPanel mwnuke ExtJS 2 09.11.2009 19:25