2015-09-03 6 views
0

Я использую реагент для разработки сайта. Мне непонятно, как работать с сенсорными событиями в реагенте, вообще-то, в общем. Я прочитал этот пост clojurescript: touch events and Domina, но мне нужно использовать domina для управления событиями на касании с реагентом? У кого-нибудь есть фрагмент кода для обнаружения - с учетом элемента dom - если пользователь пропустил% слева или справа?touch left/touch right events in the reagent

ответ

3

Реагент использует виртуальные DOM реактивов и синтетические события. Коснитесь событий available in React, но вы должны позвонить (.initializeTouchEvents js/React true) перед рендерингом любого компонента (т. Е. Перед вызовом reagent.core/render-component).

Редактировать: Код ниже не работает, потому что события касания более сложны, чем события мыши. См. this MDN page для некоторых (JS) примеров. Реакция, похоже, реализует тот же API-интерфейс Touch.


Для проценте салфетки, сделать что-то вроде следующего (непроверенные):

(defn swipe-element [] 
    (let [swipe-state (atom {:width 0, :start-x 0, :current-x 0})] 
    (fn [] 
     [:div {:on-touch-start 
      (fn [e] 
       (reset! swipe-state {:width (.. e -target -offsetWidth) 
            :start-x (.. e -target -pageX) 
            :current-x (.. e -target -pageX)})) 
      :on-touch-move 
      (fn [e] 
       (swap! swipe-state assoc :current-x (.. e -target -pageX)))} 
     (let [{:keys [width start-x current-x]} @swipe-state 
       direction (if (> current-x start-x) "right" "left")] 
      (str "Swipe " direction ": " 
       (* (/ (.abs js/Math (- start-x current-x)) width) 100) "%"))))) 
+0

благодарит за тщательное объяснение! – jdkealy

+0

На самом деле на большее тестирование ... (.. e -target -pageX) всегда не определено:/ – jdkealy

+0

О, да, кажется, что события касания сложнее, чем события мыши ... Я действительно говорил, что это было непроверено. Я отредактирую сообщение. – nilern

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

  • Нет связанных вопросов^_^