2016-04-11 6 views
7

Может ли кто-нибудь сказать мне, как создать обработчик события щелчка правой кнопкой мыши в Clojure? Я знаком с «: щелчком» для простых кликов, но не прав или двойных щелчков. Кажется, не найти полезные ресурсы в Интернете. Благодаря!Щелкните правой кнопкой мыши на ClojureScript?

+1

см. Http://stackoverflow.com/questions/2405771/is-right-click-a-javascript-event – edbond

+0

Спасибо, но это для Javascript not Clojure. Я понимаю, что JS работает под капотом Clojure, но ищет фрагмент кода в Clojure. –

ответ

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).
  • Второй щелчок правой кнопкой мыши отключит контекстное меню, но ни один слушатель не будет запущен.
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

Смежные вопросы