我无法在Domina的touchstart活动中获得'touch'或'changedTouches'列表.
这是我的:需要的东西:
(ns myproj
(:require-macros [hiccups.core :as h])
(:require [domina :as dom]
[hiccups.runtime :as hiccupsrt]
[domina.events :as ev]
[cljs.reader :refer [read-string]]
[wsosc :as wo]
[clojure.browser.repl :as repl]
))
Run Code Online (Sandbox Code Playgroud)
这是我的touchstart事件处理程序:
(defn touchstart [evt]
; store event in an atom for repl access
(swap! de (fn [x] evt))
; print something to html to show a result (no console on the phone)
(dom/set-text! (dom/by-id "result") (str "blah" evt))
; hopefully someday extract touch coordinates here.
(let [rct (.getBoundingClientRect (dom/by-id "osccanvas"))
;touchlist1 (get evt "changedTouches")
;touchlist2 (.changedTouches evt)
;touchlist3 (.-changedTouches evt)
;kies (keys evt)]
wat (:type evt) ; this works
;wat (ev/raw-event evt) ; this works
;touchlist (.-changedTouches evt)]
;touch (.item touchlist 1)]
]
(dom/set-text! (dom/by-id "result") (str "touchstart touch:" wat))))
Run Code Online (Sandbox Code Playgroud)
'de'是我试图用于调试的原子.我能从事件中得到:类型,但就是这样.除了ev/raw-event之外,几乎所有其他评论的东西都不起作用.raw-event返回一个从repl中完全可以包含的对象,至少对我来说是这样.如果我交换!de与原始事件看起来像这样:
ClojureScript:myproj>@de
#<[object Object]>
Run Code Online (Sandbox Code Playgroud)
我不知道如何从中提取信息,它似乎对(键x)或(.keys x)等事情反应迟钝.
同样奇怪的是我可以在上面的函数中调用(:type evt),但是如果我将evt赋给de我不能用repl中的'de'原子做同样的事情,即(:type @de ).
在经历了很多挫折后我终于开始工作了.事实证明,工作中有很多层我并不是真正意识到(并且不想知道!).主要的是在多米纳触摸事件对象中没有触摸信息 - 甚至在多米纳获得事件之前就被剥离了.就像这样:
原始浏览器事件 - >谷歌关闭库 - >多米纳库 - >我的代码
并且google闭包(不是clojure,它的javascript)库实际上剥离了触摸信息,因此它在我得到的事件对象中不可用.谢谢,谷歌.但是,原始事件仍然可以访问,只有两层.代码如下所示:
(defn touchstart [evt]
(let [wat (ev/raw-event evt)
touches (.-changedTouches (.getBrowserEvent wat))
touch (.item touches 0)
]
(domousedown (.-clientX touch) (.-clientY touch))
))
Run Code Online (Sandbox Code Playgroud)
因此,我使用Domina的原始事件函数来获取事件的谷歌闭包版本('wat').但那也没有触控信息.我必须使用getBrowserEvent再多一个级别,然后我可以调用这里记录的changedTouches方法:
https://developer.mozilla.org/en-US/docs/DOM/TouchEvent
最后一个难题是首先检测是否存在触摸屏,因此我可以为此设置正确的事件功能.这个非clojure黑客做的工作:
(if (js* "'ontouchstart' in window")
<set up touch events>
<set up non-touch events>)
Run Code Online (Sandbox Code Playgroud)
我尝试了各种各样的clojure语法排列,但似乎没有什么对我有用.对此提出建议.
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |