gpt4 book ai didi

clojurescript:触摸事件和 Domina

转载 作者:行者123 更新时间:2023-12-02 22:08:44 24 4
gpt4 key购买 nike

我无法从 Domina 的 touchstart 事件中获取“touch”或“changedTouches”列表。

这是我的 :require 东西:

(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]
))

这是我的 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))))

'de' 是我尝试用于调试的原子。我能够从事件中获取 :type 但仅此而已。除了 ev/raw-event 之外,几乎没有其他评论的东西起作用。 raw-event 从 repl 返回一个相当难以理解的对象,至少对我来说是这样。如果我交换! de 与原始事件它看起来像这样:

ClojureScript:myproj>@de
#<[object Object]>

我不知道如何从中提取信息,它似乎对 (keys x) 或 (.keys x) 等内容 react 迟钝

同样奇怪的是,我可以在上面的函数中调用 (:type evt),但是如果我将 evt 分配给 de,我就不能对 repl 中的“de”原子做同样的事情,即 (:输入@de)。

最佳答案

好吧,在经历了很多挫折之后,我终于开始工作了。事实证明,有许多层在起作用,我并没有真正意识到(也不想知道!)。最主要的是在 domina 触摸事件对象中没有触摸信息——甚至在 domina 获得事件之前就被删除了。是这样的:

原始浏览器事件 -> 谷歌闭包库 -> domina 库 -> 我的代码

而且 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))
))

所以我使用 Domina 的原始事件函数来获取事件的谷歌闭包版本 ('wat')。但这也没有触摸信息。我必须使用 getBrowserEvent 更上一层楼,然后我可以调用此处记录的 changedTouches 方法:

https://developer.mozilla.org/en-US/docs/DOM/TouchEvent

最后一个难题是首先检测触摸屏是否存在,因此我可以为此设置正确的事件函数。这个非 clojure hack 完成了这项工作:

(if (js* "'ontouchstart' in window")
<set up touch events>
<set up non-touch events>)

我在这里尝试了各种 clojure 语法排列,但似乎没有任何效果。对此持开放态度。

关于clojurescript:触摸事件和 Domina,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15732028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com