【问题标题】:Copy To Clipboard On Click With Pseudo Element Tooltips使用伪元素工具提示单击时复制到剪贴板
【发布时间】:2019-06-22 05:14:54
【问题描述】:

我正在尝试使用可点击的伪元素创建一个工具提示,然后运行一个函数以复制到剪贴板。

我已经尝试在 CSS 伪元素内以及跨度内添加 onClick 作为 onClick。

function myFunction() {
  var copyText = document.getElementById("firstnamereflect");
  copyText.select();
  document.execCommand("copy");
  alert("Copied the text: " + copyText.value);
}
[data-tooltip] {
  display: inline-block;
  position: relative;
  cursor: help;
  padding: 4px;
}


/* Tooltip styling */

[data-tooltip]:before {
  content: attr(data-tooltip);
  display: none;
  position: absolute;
  background: #000;
  color: #fff;
  padding: 4px 8px;
  font-size: 14px;
  line-height: 1.4;
  min-width: 100px;
  text-align: center;
  border-radius: 4px;
}


/* Dynamic horizontal centering */

[data-tooltip-position="top"]:before,
[data-tooltip-position="bottom"]:before {
  left: 50%;
  -ms-transform: translateX(-50%);
  -moz-transform: translateX(-50%);
  -webkit-transform: translateX(-50%);
  transform: translateX(-50%);
}

[data-tooltip-position="bottom"]:before {
  top: 100%;
  margin-top: 6px;
}


/* Tooltip arrow styling/placement */

[data-tooltip]:after {
  content: '';
  display: none;
  position: absolute;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}


/* Dynamic horizontal centering for the tooltip */

[data-tooltip-position="top"]:after,
[data-tooltip-position="bottom"]:after {
  left: 50%;
  margin-left: -6px;
}

[data-tooltip-position="top"]:after {
  bottom: 100%;
  border-width: 6px 6px 0;
  border-top-color: #000;
}

[data-tooltip-position="bottom"]:after {
  top: 100%;
  border-width: 0 6px 6px;
  border-bottom-color: #000;
}


/* Show the tooltip when hovering */

[data-tooltip]:hover:before,
[data-tooltip]:hover:after {
  display: block;
  z-index: 50;
}
<div class="fixed">
  <span onclick="myFunction()" data-tooltip="Copy" data-tooltip-position="bottom" id="firstnamereflect"></span> </div>

我希望当我点击由 data-tooltip 创建的复制工具提示时,它会运行一个函数。

【问题讨论】:

    标签: javascript css copy clipboard pseudo-element


    【解决方案1】:

    我会这样做。我认为您可以将事件处理程序附加到工具提示本身。一旦显示为无,它就不会呈现给用户,因此如果用户在空间中单击,则不会发生任何事情。

    JS代码:

    // attach an event handler that'll show the tooltip 
    document.querySelector("#hoverText").onmouseover = () => {
      document.querySelector("#toolTip").style.display = "inline-block";
    }
    
    // attach an event handler that'll hide the tooltip 
    document.querySelector("#hoverText").onmouseout = () => {
      document.querySelector("#toolTip").style.display = "none";
    }
    
    // attach the copy function
    document.querySelector("#toolTip").onclick = copyToClipboard;
    
    

    【讨论】:

    • 对不起。这是我前六个月的兼职编码。我不明白你从哪里得到#hoverText 和#toolTip。
    • @JasonMarsteller 抱歉,我没有使用您使用的 ID。我只是一个通用的 id 来描述可悬停的文本和工具提示。您可以将 id 替换为正确的 id 元素。
    • 感谢您的解释。编码社区非常热情!
    【解决方案2】:

    我已经修改了您的脚本并使其工作。 copyText.select(); 仅适用于输入、文本区域等文本框。您可以使用 range 从 div/span 中检索值

    把你的函数改成

    function myFunction() {
      var copyText = document.getElementById("firstnamereflect").firstChild;
      var range = document.createRange();
      var endOffset = copyText.length;
      range.setStart(copyText, 0);
      range.setEnd(copyText, endOffset);
      var selection = window.getSelection();
      selection.removeAllRanges();
      selection.addRange(range);
      alert("Copied the text: " + range);
    }
    

    function myFunction() {
      var copyText = document.getElementById("firstnamereflect").firstChild;
      var range = document.createRange();
      var endOffset = copyText.length;
      range.setStart(copyText, 0);
      range.setEnd(copyText, endOffset);
      var selection = window.getSelection();
      selection.removeAllRanges();
      selection.addRange(range);
      alert("Copied the text: " + range);
    }
    [data-tooltip] {
      display: inline-block;
      position: relative;
      cursor: help;
      padding: 4px;
    }
    
    
    /* Tooltip styling */
    
    [data-tooltip]:before {
      content: attr(data-tooltip);
      display: none;
      position: absolute;
      background: #000;
      color: #fff;
      padding: 4px 8px;
      font-size: 14px;
      line-height: 1.4;
      min-width: 100px;
      text-align: center;
      border-radius: 4px;
    }
    
    
    /* Dynamic horizontal centering */
    
    [data-tooltip-position="top"]:before,
    [data-tooltip-position="bottom"]:before {
      left: 50%;
      -ms-transform: translateX(-50%);
      -moz-transform: translateX(-50%);
      -webkit-transform: translateX(-50%);
      transform: translateX(-50%);
    }
    
    [data-tooltip-position="bottom"]:before {
      top: 100%;
      margin-top: 6px;
    }
    
    
    /* Tooltip arrow styling/placement */
    
    [data-tooltip]:after {
      content: '';
      display: none;
      position: absolute;
      width: 0;
      height: 0;
      border-color: transparent;
      border-style: solid;
    }
    
    
    /* Dynamic horizontal centering for the tooltip */
    
    [data-tooltip-position="top"]:after,
    [data-tooltip-position="bottom"]:after {
      left: 50%;
      margin-left: -6px;
    }
    
    [data-tooltip-position="top"]:after {
      bottom: 100%;
      border-width: 6px 6px 0;
      border-top-color: #000;
    }
    
    [data-tooltip-position="bottom"]:after {
      top: 100%;
      border-width: 0 6px 6px;
      border-bottom-color: #000;
    }
    
    
    /* Show the tooltip when hovering */
    
    [data-tooltip]:hover:before,
    [data-tooltip]:hover:after {
      display: block;
      z-index: 50;
    }
    <div class="fixed">
      <span onclick="myFunction()" data-tooltip="Copy" data-tooltip-position="bottom" id="firstnamereflect">Hover Me</span>
    </div>

    【讨论】:

    • 谢谢!一旦我将警报更改为 document.execCommand("copy");它做到了!非常感谢!
    【解决方案3】:

    谢谢你,吉努!一旦我将警报更改为 document.execCommand("copy");细绳。现在我只需要剖析它,这样我就可以理解你做了什么!

    function myFunction() {
      var copyText = document.getElementById("firstnamereflect").firstChild;
      var range = document.createRange();
      var endOffset = copyText.length;
      range.setStart(copyText, 0);
      range.setEnd(copyText, endOffset);
      var selection = window.getSelection();
      selection.removeAllRanges();
      selection.addRange(range);
      alert("Copied the text: " + range);
    }
    [data-tooltip] {
      display: inline-block;
      position: relative;
      cursor: help;
      padding: 4px;
    }
    
    
    /* Tooltip styling */
    
    [data-tooltip]:before {
      content: attr(data-tooltip);
      display: none;
      position: absolute;
      background: #000;
      color: #fff;
      padding: 4px 8px;
      font-size: 14px;
      line-height: 1.4;
      min-width: 100px;
      text-align: center;
      border-radius: 4px;
    }
    
    
    /* Dynamic horizontal centering */
    
    [data-tooltip-position="top"]:before,
    [data-tooltip-position="bottom"]:before {
      left: 50%;
      -ms-transform: translateX(-50%);
      -moz-transform: translateX(-50%);
      -webkit-transform: translateX(-50%);
      transform: translateX(-50%);
    }
    
    [data-tooltip-position="bottom"]:before {
      top: 100%;
      margin-top: 6px;
    }
    
    
    /* Tooltip arrow styling/placement */
    
    [data-tooltip]:after {
      content: '';
      display: none;
      position: absolute;
      width: 0;
      height: 0;
      border-color: transparent;
      border-style: solid;
    }
    
    
    /* Dynamic horizontal centering for the tooltip */
    
    [data-tooltip-position="top"]:after,
    [data-tooltip-position="bottom"]:after {
      left: 50%;
      margin-left: -6px;
    }
    
    [data-tooltip-position="top"]:after {
      bottom: 100%;
      border-width: 6px 6px 0;
      border-top-color: #000;
    }
    
    [data-tooltip-position="bottom"]:after {
      top: 100%;
      border-width: 0 6px 6px;
      border-bottom-color: #000;
    }
    
    
    /* Show the tooltip when hovering */
    
    [data-tooltip]:hover:before,
    [data-tooltip]:hover:after {
      display: block;
      z-index: 50;
    }
    <div class="fixed">
      <span onclick="myFunction()" data-tooltip="Copy" data-tooltip-position="bottom" id="firstnamereflect">Hover Me</span>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 2014-04-30
      • 2011-02-03
      • 2017-09-17
      相关资源
      最近更新 更多