• zClip使用时ZeroClipboard生成的位置不对的问题


    zclip官网:http://steamdev.com/zclip

    我之前在另外一篇博文里面写了一个解决生成的位置不对的问题,请参考:http://www.cnblogs.com/longshiyVip/p/4663870.html,但是最近按照之前的方式发现不管用,于是又开始需求解决方案,就是下面的这个方案。

    zClip是个很好的兼容浏览器的复制到剪贴板的解决方案。zClip在简单干净的页面时工作正常,但放到工作平台的框架里面去以后就不工作了。ZeroClipboard取到的offsetTop和offsetLeft不对。通过firebug调试半天才知道原因。

    在执行初期绑定代码后:

    <script type="text/javascript">
        $(document).ready(function () {
          $("a#copy-dynamic").zclip({
            path: 'js/ZeroClipboard.swf',
            copy: function () { return $('input#dynamic').val(); },
            afterCopy: function () { alert("ok"); }
          });
        });
      </script>

    这段代码会自动在id="copy-dynamic”的控件后生成以下代码:

    <div class="zclip" id="zclip-ZeroClipboardMovie_1" 
    style
    ="position: absolute; left: 10px; top: 33px; 258px; height: 14px; z-index: 99;"> <embed id="ZeroClipboardMovie_1" src="js/ZeroClipboard.swf" loop="false" menu="false"
    quality
    ="best" bgcolor="#ffffff" width="258" height="14" name="ZeroClipboardMovie_1"
    align
    ="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash"
    pluginspage
    ="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&amp;width=258&amp;height=14"
    wmode
    ="transparent"></div>

    其本意是会在id="copy-dynamic”的控件上面覆盖“ZeroClipboard.swf”,检查发现这个位置不对,没有覆盖上去。

    修改jquery.zclip.js中的getDOMObjectPosition函数,如下所示:

    getDOMObjectPosition: function (obj, stopObj) {
            // get absolute coordinates for dom element
            var info = {
                left: 0,
                top: 0,
                 obj.width ? obj.width : obj.offsetWidth,
                height: obj.height ? obj.height : obj.offsetHeight
            };
    
            if (obj && (obj != stopObj)) {
              //info.left += obj.offsetLeft; //修改前
              //info.top += obj.offsetTop; //修改前
              jpos = $(obj).position(); //修改后
              info.left += jpos.left; //修改后
              info.top += jpos.top; //修改后
            }
    
            return info;
        }

    这里使用了jQuery的position函数。

    重新刷新界面,发现这次生成的位置终于对了,成功覆盖到id="copy-dynamic”的控件上面,成功!

  • 相关阅读:
    day21作业
    作业day20
    K8S架构图
    day20 类的继承
    课上随手记
    第一篇CEPH集群的学习
    day19 类的讲解
    Eureka工作原理
    局域网、以太网(标准以太网、工业以太网和实时以太网)与无线局域网
    无线局域网,有线局域网
  • 原文地址:https://www.cnblogs.com/longshiyVip/p/4745011.html
Copyright © 2020-2023  润新知