clojurescript:触摸事件和 Domina

2024-01-14

我无法从 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 与 raw-event 看起来像这样:

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

我不知道如何从中提取信息,它似乎对 (keys x) 或 (.keys x) 等内容没有反应。

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


好吧,经过多次挫折后,我终于开始工作了。事实证明,有很多层次在起作用,而我并没有真正意识到(并且不想意识到!)。最主要的是,domina 触摸事件对象中没有触摸信息 - 即使在 domina 获取事件之前,该信息也会被删除。就像这样:

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

谷歌闭包(不是 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 的 raw-event 函数来获取事件的 google 闭包版本('wat')。但它也没有触摸信息。我必须使用 getBrowserEvent 更上一层,然后我可以调用此处记录的changedTouches 方法:

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

最后一个难题是首先检测触摸屏是否存在,这样我就可以为此设置正确的事件函数。这个非 Clojure 黑客可以完成以下工作:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

clojurescript:触摸事件和 Domina 的相关文章

随机推荐

  • ios7中的UITableViewCell现在左右有间隙

    我有一个 UITableView 在 ios6 中 我的自定义单元格完全拉伸到屏幕的左侧和右侧 所以我的手机左侧的方形图像与手机屏幕很硬 然而 现在在 ios7 中 左侧出现了一个小间隙 因此图像现在远离侧面 并且与单元格内的文本略有重叠
  • 未捕获的类型错误:$(...).steps 不是函数

    所以我在我的引导模板中看到了非常漂亮的表单 我想在我的项目中使用它们 我放置了我认为需要导入的所有必需文件 这些文件添加在代码底部 所需文件位于正确的目录中 例如 jquery 步骤 C xampp htdocs rps public fi
  • 如何在vim中将选定的行复制到剪贴板

    如何在 vim 中将选定的行复制到剪贴板 我知道该怎么做所有文本文件 https stackoverflow com q 1620018 1082727 但我想对选定的行进行操作 谢谢 SHIFTV puts you in select l
  • 通过 CSS 设置单选按钮启用/禁用

    有没有办法通过 CSS 启用 禁用 未选中 取消选中 单选按钮 我需要在客户端上切换一些单选按钮 以便可以在服务器上读取这些值 但是将 enabled 属性设置为 false 然后通过 javascript 在客户端上更改它似乎会阻止我回发
  • javascript onsubmit 不工作

    我试图让 JavaScript 函数在提交表单时起作用 该函数似乎没有运行 有人可以帮忙吗
  • 您喜欢哪种 Ruby 字符串引用风格?

    您喜欢哪种 Ruby 字符串引用风格 到现在为止我一直用 single quotes 除非字符串包含某些转义序列或插值 在这种情况下我显然必须使用 double quotes 然而 真的有什么理由不到处使用双引号字符串吗 如果必须转义双引号
  • 使用一个线程执行一个部分,并使用多个线程执行一个 for 循环

    我正在使用 OpenMP 并且想要生成线程 以便一个线程执行一段代码并完成 与运行并行 for 循环迭代的 N 个线程并行 执行应该是这样的 Section A one thread Section B parallel for multi
  • QML Profiler 无法连接到服务器

    我正在尝试使用 QML Profiler 找出是什么导致我的程序变慢 但是当我启动它时 我收到以下消息 QML Profiler Connecting to debug server at 127 0 0 1 50540 QML Profi
  • 使用 Pandas to_datetime 将对象转换为日期时间不起作用

    所以我尝试使用以下方法将对象转换为 pandas 日期时间to datetime选项 但是它不起作用 My code ship date pd to datetime d shipmentDate print ship date head
  • iOS6 - 如何清除主屏幕/独立Web应用程序的缓存?

    Apple 似乎改变了 iOS 6 中主屏幕 独立 Web 应用程序的工作方式 根据各种博客文章 example http blog nsbasic com p 928 这些应用程序现在拥有自己的专用空间来存储缓存文件 sqlite 数据库
  • 阿尔法 + RGB -> ARGB?

    在as3中 是否有实用程序或函数可以将RGB颜色 例如0xFF0000 和alpha值 例如0 5 转换为A 32位ARGB值 从 ARGB 到 RGB alpha 一些解释 位图数据可以在其构造函数中采用 ARGB 值 但在精灵中填充形状
  • 如何使用 Django URL 命名空间?

    我正在努力掌握窍门Django URL 命名空间 http docs djangoproject com en dev topics http urls defining url namespaces 但我找不到任何示例或文档 这是我尝试过
  • CloudKit - 完整且完整的错误处理示例

    Apple 非常清楚 他们在每个视频中都表示 处理错误的 CloudKit 应用程序和不处理错误的 CloudKit 应用程序之间的区别就是工作应用程序和不处理错误的应用程序之间的区别 但是 我无法在任何地方找到每个错误含义的正确列表 哪些
  • Tensorflow/keras:“logits和标签必须具有相同的第一维”如何​​压缩logits或扩展标签?

    我正在尝试制作一个简单的 CNN 分类器模型 对于我的训练图像 BATCH SIZEx227x227x1 和标签 BATCH SIZEx7 数据集 我使用 numpy ndarrays 它们通过批量输入到模型中ImageDataGenera
  • 为什么不能以发布模式建立网站?

    在 ASP Net 中 如果我设置Web应用程序我可以将其配置为释放模式但有一个website我只能将配置设置为调试模式 为什么是这样 在网站项目中 每个页面都是根据第一次请求动态编译的 除非您在配置文件中另有指定 否则它将在不调试符号的情
  • Node js 单元测试:模拟需要依赖

    我在为以下设置编写单元测试作为 jira js 文件 在 node js 模块中 时遇到问题 var rest require restler https www npmjs com package restler module expor
  • 将 pyno 与我现有的 python 安装一起使用

    我正在尝试使用 PyUNO 作为从 Django 服务器内将不同文档格式 doc wordperfect html 等 转换为 PDF 的方法 我很难受import uno上班 做的时候好像失败了import pyuno 带有一条消息Imp
  • 从 Drupal 站点内重定向到新页面

    我正在使用 Drupal 站点 我们想要设置一个重定向到外部站点的特殊 URL 换句话说 如果http www mysite com http www mysite com是我们的 Drupal 网站 我们想要http www mysite
  • 美元符号和/或破折号破坏 Razor 的解析器

    我试图呈现的最终结果
  • clojurescript:触摸事件和 Domina

    我无法从 Domina 的 touchstart 事件中获取 touch 或 changedTouches 列表 这是我的 require 东西 ns myproj require macros hiccups core as h requ