繁体   English   中英

如何禁用对Plotly-Object的右键单击?

How to disable right-clicks on Plotly-Object?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想在Plotly对象的顶部使用contextmenu( jQuery contextMenu )。 问题是,当我选择与Box多个元素-工具或套索工具-选择和栏上,然后单击鼠标右键,它会触发一个栏上单击事件和先前的选择将丢失。

如何防止在Plotly对象上发生右键单击,因此仅左键单击会触发单击/选择事件,而右键单击仅保留用于打开上下文菜单?

在此处输入图片说明

闪亮-应用程序:

library(shiny)
library(ggplot2)
library(plotly)

dfN <- data.frame(
  time_stamp = seq.Date(as.Date("2018-04-01"), as.Date("2018-07-30"), 1),
  val = runif(121, 100,1000),
  col = "green", stringsAsFactors = F
)

jsCode = HTML('
$(document).on("shiny:connected", function() {
    $(function() {
        $.contextMenu({
            selector: "#plot",
            callback: function(key, options) {
              switch(key){
                 case "copy":
                    console.log("Contextmenu: Copy was clicked");
                    break;
                case "paste":
                    console.log("Contextmenu: Paste was clicked");
                    break;
              }
            },
            items: {
              copy: {name: "copy", icon: "copy"},
              "paste": {name: "paste", icon: "paste"}
            }
          });
      });
});')


ui <- fluidPage(
  tags$head(tags$script(src="https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.7.1/jquery.contextMenu.min.js")),
  tags$head(tags$script(src="https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.7.1/jquery.ui.position.js")),
  tags$head(tags$link(rel="stylesheet", href="https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.7.1/jquery.contextMenu.min.css")),
  tags$head(tags$script(jsCode)),
  plotlyOutput("plot")
)

server <- function(input, output, session) {
  output$plot <- renderPlotly({
    key <- highlight_key(dfN)
    p <- ggplot() +
      geom_col(data = key, aes(x = plotly:::to_milliseconds(time_stamp), y = val, fill=I(col)))

    ggplotly(p, source = "Src") %>% 
      layout(xaxis = list(type = "date")) %>% 
      highlight(off = "plotly_doubleclick", on = "plotly_click", color = "blue",
                opacityDim = 0.5, selected = attrs_selected(opacity = 1))
  })
}

shinyApp(ui, server)
1 个回复

我找到了一个解决方案,该解决方案需要更改plotly包的基础plotly.js文件。

正常点击存储为d.event.buttons = 1 ,显然右键单击存储为d.event.buttons = 2

所以在本节中

graphDiv.on('plotly_click', function(d) {

});

我插入了一个if条件来检查event.buttons是否为1,否则将不会发出任何点击。

这适用于当前的CRAN版本的plotly,现在dev-version有了很大的不同。

  if (d.event.buttons == 1) {
    // Normal Clicks
    Shiny.setInputValue(
      ".clientValue-plotly_click-" + x.source,
      JSON.stringify(eventDataWithKey(d))
    );
    graphDiv._shiny_plotly_click = d;            
  }
1 禁用右键单击网站

我下面有这段代码来禁用右键单击。 当您单击右键时,它说功能已禁用。 哪个可行,但我希望它在单击右键时基本不显示任何内容...什么都不会发生……我们可以使用哪种魔术来做到这一点? ...

2 如何禁用右键单击 IFRAME

我在 MVC Web 应用程序的 IFrame 上显示了一个文档内容。 不应复制和打印内容。 我尝试使用两个函数 style="pointer-events:none;" 禁用右键单击 iframe 的 oncontextmenu="return false" 工作正常。 但是在右键单击时,会显示“ ...

3 如何禁用右键单击我的网页?

我可以在不使用 JavaScript 的情况下禁用右键单击我的网页吗? 我问这个是因为大多数浏览器允许用户禁用 JavaScript。 如果没有,如何使用 JavaScript 禁用右键单击? ...

4 在 AUDIO 上禁用右键单击

我见过一种禁用右键单击的方法,但我想知道如何在 HTML5 音频上禁用它。 我已经看到使用一行 JS 禁用右键单击的示例,但是它不适用于 DOM。 JS: document.addEventListener('contextaudio', event =&gt; event.preventDe ...

5 禁用右键单击画布

我正在使用带有 html 的画布在屏幕上绘制。 我需要的是只用左键单击绘制,右键单击什么都不做。 我尝试了以下方法: 它禁用了右键单击菜单,但我可以通过左键单击和右键单击来按下画布(并最终在其上绘图)。 我错过了什么? ...

7 禁用右键单击pdf

我试图在嵌入标签中禁用右键单击嵌入式pdf,以便在右键单击时不显示另存为..,打印等。 但是没有用。 我正在使用Chrome浏览器。 我非常感谢你们中的任何人的帮助和一百万的提前感谢。 我尝试过使用这种方法但是没有用。 如何禁用右键单击Ifram Pdf文件 ...

8 禁用右键单击OS X Webview

我整理了一个基本的OS X应用程序,它具有填充整个窗口的webview并加载带有一些文本和图像的本地网页。 现在,如果用户右键单击其中一个图像,则会获得一个菜单,其中包含“在新窗口中打开图像”,“下载图像”和“复制图像”选项。 有没有办法轻松禁用右键单击webview? ...

9 禁用右键单击画布

我正在使用带html的画布在屏幕上绘制。 我需要做的就是只用左键单击绘制,而用右键单击则什么都不做。 我尝试了以下方法: 它禁用了右键单击菜单,但是我可以用鼠标左键和右键单击来按下画布(并最终在其上绘制)。 我想念什么? ...

10 禁用右键单击视频

我刚刚在wordpress网站上加载了video.js插件。 我想找出是否可以禁用“获取视频网址”等链接。我想从youtube添加视频,但不希望用户链接到未列出的视频。 这些视频用于一门课程,我不希望它们共享。 只有课程中的用户才能访问视频。 但是,由于其条款和条件,YOUTUB ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM