ну а как насчёт готовых решений,
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, и если промежуток в этот раз окажется слишком большим значит была остановка. Как то так пожалуй.
Походу тюнинг будет дольше самой разработки. Тут целая куча коэффициентов получается, их нужно будет объявить в самом начале плагина чтобы затем было удобно подбирать, не в коем случае не объявлять коэффициенты в самом теле.
Лично я бы, не поленился, сделать отдельную форму для параметров, и тюнинговал бы прямо на странице не лазя в код. Времени на создание пусть даже час, зато отладил бы раза в три быстрее.