Я использую реагент для разработки сайта. Мне непонятно, как работать с сенсорными событиями в реагенте, вообще-то, в общем. Я прочитал этот пост clojurescript: touch events and Domina, но мне нужно использовать domina для управления событиями на касании с реагентом? У кого-нибудь есть фрагмент кода для обнаружения - с учетом элемента dom - если пользователь пропустил% слева или справа?touch left/touch right events in the reagent
0
A
ответ
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) "%")))))
благодарит за тщательное объяснение! – jdkealy
На самом деле на большее тестирование ... (.. e -target -pageX) всегда не определено:/ – jdkealy
О, да, кажется, что события касания сложнее, чем события мыши ... Я действительно говорил, что это было непроверено. Я отредактирую сообщение. – nilern