代码之家  ›  专栏  ›  技术社区  ›  Daniel Bingham

无法在jcrop中拖动选定内容,有什么可能会破坏它?

  •  5
  • Daniel Bingham  · 技术社区  · 15 年前

    我迷路了。我使用的是jquery 1.4.2和jcrop 0.98。其他一切工作正常,但创建后无法移动选定内容。当我将鼠标悬停在所选内容上并单击时,不会发生任何事情。

    我有jquery库、jcrop库和jcrop css文件。这是一个非常干净的页面,上面没有其他内容。我不知道我是否无意中在我自己的javascript和css中覆盖了一些东西,以至于它会破坏jcrop,这两者都有很多。但是萤火虫什么也没发现。

    这些教程在我的浏览和服务器上都很好地工作,尽管它们确实使用了不同版本的jquery。但是,当我将它们最初使用的版本替换为我使用的版本时,它们仍然可以正常工作。所以这与我的javascript或css有关。

    我在这里完全迷路了,我在考虑我能想到的问题可能在哪里,但我甚至不知道该去哪里。以前有人遇到过这个问题吗?问题是什么?你是如何解决的?我应该在哪里查找错误或错误覆盖?

    3 回复  |  直到 13 年前
        1
  •  14
  •   Daniel Bingham    15 年前

    问题解决:

    * { margin: 0; padding: 0; position: relative; }
    

    这个 position: relative; 正超越了JCROP对绝对定位的需求。一旦移除,它就工作得很好。我需要它来做其他的东西,但我只是在更精确的基础上应用它。

    但我花了很长时间才找到它,不得不把我的javascript和css都放到它们的一个演示文件中,并检查每一个片段是否有冲突。屁股疼。

    如果遇到类似的问题,请检查是否存在类似的定位冲突。

        2
  •  14
  •   Shayne    13 年前

    这可能发生的另一个原因是,如果忘记包含CSS。

        3
  •  0
  •   Russell Shingleton    13 年前

    我在一个项目中遇到了这个问题,在这个项目中,有人声明了CSS中所有div的相对位置。不幸的是,要修复它需要做的工作太多了,所以我必须稍微深入地研究代码以找到修复方法。

    对于最新的jcrop库(发布本文时的jcrop-0.9.12),对为我修复问题的脚本进行了细微的更改。

    jquery.jcrop.js中第1122行的内容如下:

           if (Touch.support) {
                $track.bind('touchstart.jcrop', Touch.createDragger('move'));
            }
    
            $img_holder.append($track);
            disableHandles();
    

    通过将$img_holder.append($track)更改为$hdl_holder.append($track),并确保$hdl_holder是绝对位置,它为我解决了这个问题。一些相对定位和zindexing的东西正在为我扼杀它。

    我对脚本所做的两个更改是:

    第350行jquery.jcrop.js:

    $hdl_holder = $('<div />').width('100%').height('100%').css('zIndex', 320), 
    

    改为:

    $hdl_holder = $('<div />').width('100%').height('100%').css({
        zIndex: 320,
        position: 'absolute'
    }),
    

    第1122行jquery.jcrop.js:

    $img_holder.append($track);
    

    改为:

    $hdl_holder.append($track);