在ClojureScript中右键单击?

时间:2016-04-11 15:03:07

标签: clojure mouseevent clojurescript

有人能告诉我如何在Clojure中生成一个右键单击事件处理程序吗?我熟悉“点击”,只需点击一下即可,但不是右键或双击。似乎无法在线找到任何有用的资源。谢谢!

2 个答案:

答案 0 :(得分:7)

在ClojureScript中经常使用Google Closure库(Event Handling |  Closure Library | Google Developers)而不是原始JS。 events (Closure Library API Documentation - JavaScript)命名空间包含goog.events.EventType枚举,它指定每个单独的事件类型:

(ns test.core
  (:require [goog.dom :as dom]
            [goog.events :as events]))

(letfn [(menu-listener [event] 
          (.log js/console (str "contextmenu " (.-button event))))
        (click-listener [event]
          (let [btn (.-button event)
                msg (if (= btn 2) "Right-click" (str "Button " btn))] 
            (.log js/console msg)))]

  (events/listen (dom/getElement "click-target") "contextmenu" menu-listener)
  (events/listen (dom/getElement "click-target") "click" click-listener))   

;; src/test/core.cljs

<!DOCTYPE html>
<html>
  <head>
    <title>contextmenu</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>
  <body>
    <p id="click-target">Right click on me</p> 
    <script src="out/test.js" type="text/javascript"></script>
  </body>
</html>

<!-- index.html -->

观察:

  • 右键单击(按钮2)将触发contextmenu侦听器。 click听众无法看到它(即使没有contextmenu听众)。
  • 第二次右键单击将关闭上下文菜单,但不会触发任何侦听器。

答案 1 :(得分:5)

使用om我右键单击上下文菜单事件。右键的按钮编号为2:

{:onContextMenu (fn [e]
                   (prn e (.-button e)))}

或简单的html + cljs:

  <div id="btn">Click me</div>

  (.addEventListener (.getElementById js/document "btn")
    "contextmenu" (fn [e] (prn e (.-button e))))

https://developer.mozilla.org/en/docs/Web/API/MouseEvent