在Bootstrap 3中复制到剪贴板

7
我想在我的网站上添加一个“复制到剪贴板”按钮。该站使用 Bootstrap 3 框架。我希望我的按钮的工作方式与此处使用的“复制到剪贴板”按钮类似:http://twitterbootstrapbuttons.w3masters.nl/ 我尝试将这段代码http://jsfiddle.net/T2uXr/ 整合进去,但是没有成功。
Javascript:
$("a.copy").on('click', function (e) {
  e.preventDefault();
}).each(function () {
  $(this).zclip({
    path: 'http://www.steamdev.com/zclip/js/ZeroClipboard.swf',
    copy: function() {
      return $(this).data('copy');
    }
  });
});

CSS:

body {
  padding: 20px
}

HTML

<hr />

<h5>These copy to clipboard links are working...</h5>

<p><a href="#" data-copy="http://test.one.com/" class="copy">Copy Original Link</a></p>

<p><a href="#" data-copy="http://test.two.com/" class="copy">Copy Medium Link</a></p>

<p><a href="#" data-copy="http://test.three.com/" class="copy">Copy Web Link</a></p>

<hr />

<h5>If I put these links inside the bootstrap dropdown, they stop working...</h5>

<div class="btn-group">
                  <a class="btn btn-small dropdown-toggle" data-toggle="dropdown" href="#">
                    View copy clipboard links
                    <span class="caret"></span>
                  </a>
                  <ul class="dropdown-menu">
                    <li><a href="#" data-copy="http://test.one.com/" class="copy">Copy Original Link</a></li>
                    <li><a href="#" data-copy="http://test.two.com/" class="copy">Copy Medium Link</a></li>
                    <li><a href="#" data-copy="http://test.three.com/" class="copy">Copy Web Link</a></li>
                    <li class="divider"></li>
                    <li><a href="mailto:" title="Email URL Links">Email URL Link</a></li>
                  </ul>
</div>

有没有想法如何将此添加到Bootstrap 3网站上的按钮中?或者有没有其他好的替代方案?
谢谢!:)

这并不是什么魔法,你只需要在页面中包含脚本,每个带有 copy 类的链接都将成为剪贴板复制链接。当然,你还需要包含 zclip 库,并且可以更改选择器以选择任何其他元素。 - Felix Kling
use code snippets - Adil Saju
2个回答

2
这是我在工作到深夜4点并发布了我的问题(点击此处查看)后解决该问题的方法,希望这能帮助某些人不要熬夜 :) 我尝试模仿Bootstrap当前网站复制其代码的方式,但Bootstrap目前正在使用旧的zeroClipboard插件。我尝试使用最新的zeroClipboard来制作与Bootstrap相同的效果。

HTML:请注意,我没有将所有代码都放在一行中,不要将precode放在第二行或缩进以使代码看起来好看,否则多余的缩进将被复制到剪贴板中。

<div class="highlight"><pre><code>Some code/text goes here</code></pre></div>

CSS:
/* ZeroClipboard styles */

.zero-clipboard {
    position: relative;
    display: none;
}
.btn-clipboard {
    position: absolute;
    top: 0;
    right: 0;
    z-index: 10;
    display: block;
    padding: 5px 8px;
    font-size: 12px;
    color: #777;
    cursor: pointer;
    background-color: #fff;
    border: 1px solid #e1e1e8;
    border-radius: 0 4px 0 4px;
}
.btn-clipboard-hover {
    color: #fff;
    background-color: #563d7c;
    border-color: #563d7c;
}

@media (min-width: 768px) {
    .zero-clipboard {
        display: block;
    }
    .zero-clipboard .btn-clipboard {
        top: -16px;
        border-top-right-radius: 0;
    }
}

JavaScript:将ZeroClipboard.swf文件放在JS文件所在的位置。
// Config ZeroClipboard
ZeroClipboard.config({
    hoverClass: 'btn-clipboard-hover'
})

// Insert copy to clipboard button before .highlight
$('.highlight').each(function () {
    var btnHtml = '<div class="zero-clipboard"><span class="btn-clipboard">Copy</span></div>';
    $(this).before(btnHtml)
});

var zeroClipboard = new ZeroClipboard($('.btn-clipboard'));
var htmlBridge = $('#global-zeroclipboard-html-bridge');

// Handlers for ZeroClipboard
zeroClipboard.on('ready', function (event) {
    htmlBridge
        .data('placement', 'top')
        .attr('title', 'Copy to clipboard')
        .tooltip();

    // Copy to clipboard
    zeroClipboard.on('copy', function (event) {
        var highlight = $(event.target).parent().nextAll('.highlight').first();
        event.clipboardData.setData("text/plain", highlight.text())
    });

    // Notify copy success and reset tooltip title
    zeroClipboard.on('aftercopy', function () {
        htmlBridge
            .attr('title', 'Copied!')
            .tooltip('fixTitle')
            .tooltip('show')
            .attr('title', 'Copy to clipboard')
            .tooltip('fixTitle')
    });
});

// Notify copy failure
zeroClipboard.on('error', function () {
    ZeroClipboard.destroy();
    htmlBridge
        .attr('title', 'Flash required')
        .tooltip('fixTitle')
        .tooltip('show');
});

0

你的代码看起来不错,而且你的jsfiddle代码也能正常工作。我在Mac OS X上尝试了Safari、Chrome和Firefox,它们都能正常工作。由于你的代码需要Flash,请确保已安装并启用Flash。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接