【问题标题】:ZeroClipboard - mouse events don't fireZeroClipboard - 鼠标事件不会触发
【发布时间】:2014-09-09 21:57:08
【问题描述】:

我一直在将 ZeroClipboard 实现到应用程序中,但在注册鼠标事件时遇到了困难。详情如下:

我已经在 Backbone 视图中使用 CoffeeScript 实现了这一点,如下所示:

initialize: ->
   # ZeroClipboard Setup
   client = new ZeroClipboard(@$el)

   # Ready
   client.on "ready", (event) ->
     console.log('ZeroClipboard Ready.')

   # Before Copy
   client.on "beforecopy", (event) ->
     console.log('Before Copy')

   # Copy-To-Clipboard Action
   client.on "copy", (event) ->
     console.log('Copied')
     clipboard = event.clipboardData
     clipboard.setData "text/plain", value

   # After Copy Action
   client.on "aftercopy", (event) =>
     console.log('AfterCopy')
     @showTooltip()

以上所有代码都有效。已成功找到 SWF 文件,readybeforecopycopyaftercopy 事件运行良好。我看到了所有预期的控制台日志记录。

然而 - 当我尝试实现支持的鼠标交互事件时,我一无所获。我尝试了以下方法但没有成功:

client.on "mouseenter", (event) ->
  console.log('MouseOver')

# # # # # # # # # # 

client.on "mouseover", (event) ->
  console.log('MouseOver')

# # # # # # # # # # 

client.on "mousedown", (event) ->
  console.log('MouseOver')

我无法从任何这些事件中获得尽可能多的 console.log。没有其他 JS 错误,而且从各个方面来看,ZeroClipboard 运行良好。

我没有成功尝试像这样添加事件侦听器:

client.addEventListener "mouseover", (event) =>
  console.log('HoverState')

它似乎不会工作,因为客户端是 ZeroClipboard 对象,而“addEventListener”不是其类的成员函数。

我确实冒险进入 ZeroClipboard.js 文件,并在应该触发 mouseover 事件的地方添加了一些 console.log() 语句,并且它们成功输出。因此,我可以(大部分)排除它是 ZeroClipboard 事件实现中的一个问题,并得出结论认为这几乎肯定是我的代码有问题,尽管在花了下午的大部分时间进行调查之后,我空手而归,找到了一个可行的解决方案.

如果有人可以帮忙,我将不胜感激 - 提前致谢!

【问题讨论】:

    标签: jquery flash backbone.js underscore.js zeroclipboard


    【解决方案1】:

    我可能误读了 ZeroClipboard doc 事件,但据我所知,它只会发出 ready / beforecopy / copy / aftercopy / destroy / error 事件,但确实如此传播 DOM 事件:

    标准鼠标事件甚至会传播到您的 DOM 元素,所以 你仍然可以有翻转和鼠标向下的效果。

    这意味着您可以像在任何其他 Backbone 视图中一样使用 DOM 节点,例如,声明事件哈希(JS 示例):

    var ZCView = Backbone.View.extend({
        events: {
            'mouseenter': function() {
                console.log('mouseenter');
            },
            'mouseover': function() {
                console.log('mouseover');
            }
        },
        initialize: function() {
            var client = new ZeroClipboard(this.el);
    
            client.on("ready", function() {
                console.log('ready');
            });
            client.on("beforecopy", function() {
                console.log('beforecopy');
            });
        }
    });
    

    还有一个演示http://jsfiddle.net/sn1ccpqw/

    【讨论】:

    • 优秀!解决方案和演示非常棒 - 清晰简洁。非常感谢您的帮助和编辑:)
    猜你喜欢
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多