запустить js при нажатии; запускать разные js при выщипывании

Я пытаюсь разработать взаимодействие, которое я разработал, где элемент html масштабируется по оси y (масштабируется по высоте) во время сжатия, так что высота элемента становится расстоянием между двумя пальцами, участвующими в жесте. На данный момент я пытаюсь прослушивать вхождение и запускать оповещение, а затем прослушивать вхождение и запускать отдельное оповещение с помощью jQuery. Вы знаете, как это сделать? Возможно без плагина?

Я пытался сделать это с помощью двух плагинов. Подробнее о первой попытке позже.

Что не так со второй попыткой, так это то, что она говорит, что щипок внутрь - это щипок, и даже нажатие или щелчок - это щипок.

Моя вторая попытка — это JS Fiddle: http://jsfiddle.net/hnabM/1/

Вот код, используемый во второй попытке:

//pinchZoom is the distance between the two fingers involved in the pinch
var pinchIn = null;
var dist = null;
$('.pinch').swipe({
    pinchIn:function(event, direction, distance, duration, fingerCount, pinchZoom){
        dist = null;
    },
    pinchOut:function(event, direction, distance, duration, fingerCount, pinchZoom){
        dist = null;
    },
    pinchStatus:function(event, phase, direction, distance, duration, fingerCount, pinchZoom){
        if(dist != null){
            if(dist > pinchZoom){
                pinchIn = true;
            }
            else{
                pinchIn = false;
            }
            dist = pinchZoom;
            if(pinchIn === true){
                console.log("pinching in");
            }
            else{
                console.log("pinching out");
            }
        }
        else{
            dist = pinchZoom;
        }
    },
    fingers:2,
    pinchThreshold:0
});

Вот что я сделал с первой попытки. У меня это заработало, но когда я объединил его со своим сайтом, оно вдруг не заработало.

В первый раз, когда я попытался это сделать, я сделал это с jQuery-версией Hammer.js ( http://eightmedia.github.io/hammer.js/) — довольно известная библиотека для прослушивания мультитач-жестов. Я успешно выполнил это отдельно от сайта, на котором мне нужно, чтобы он работал. Здесь он работает с классом .polaroid (изображения), попробуйте зажать их, и они уменьшатся по оси y, а при нажатии на них срабатывает предупреждение : http://goo.gl/oOQDH0. Однако, когда я применяю тот же самый js на сайте, на котором он мне нужен, он внезапно не работает. Все зависимости есть. Нет ошибок. Также по какой-то причине прокрутка несколько заблокирована (сложно сделать на сенсорных устройствах). Точно такой же код применяется к классу .dataCard (белые прямоугольники под заголовком), но не работает: http://goo.gl/dagKxT

Я был бы очень, очень признателен за любую помощь в развитии и работе этого взаимодействия. Заранее спасибо!


person gomangomango    schedule 10.12.2013    source источник
comment
пожалуйста, используйте jsfiddle для демонстрации и без предупреждения...   -  person zb'    schedule 13.12.2013
comment
@eicto Обновленный вопрос. Переформулирован и на этот раз добавлен скрипт JS.   -  person gomangomango    schedule 14.12.2013
comment
jsfiddle.net/Nnr3Y/3 просто попробуйте, не знаю, подходит ли это вам   -  person Gotschi    schedule 16.12.2013


Ответы (1)


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

В любом случае посмотрите на Hammer.js https://github.com/EightMedia/hammer.js

Который поддерживает/эмулирует множество распространенных сенсорных жестов. В том числе щепотку для увеличения. Это есть на их примерных страницах:

https://github.com/EightMedia/hammer.js/blob/master/examples/pinchzoom.html

Вы, вероятно, провели свое исследование и видели множество библиотек, подобных этой, но кодовая база Hammer действительно хорошо организована и проста для понимания.

Если вы собираетесь попробовать это с нуля, вы, вероятно, в конечном итоге обнаружите жест в начале и заблокируете его с помощью общего флага (чтобы другие жесты не срабатывали), а затем сбросите флаг, когда жест завершится.

person backdesk    schedule 19.12.2013