reactjs - React-cropper - cropBox 不在图像中

标签 reactjs cropper cropperjs

我正在使用最新的cropper.js react 包react-cropper在我目前的项目中,我迷路了。问题是,裁剪区域可以超出图像,这是不应该的。我已经尝试了我能想到的一切。

这里是 _crop 方法,在cropper的每次变化时都会被调用。

componentDidMount = () => {
    sessionStorage.setItem('shouldMove', false)
  }

_crop = ( e ) => {
    var canvasData = document.getElementsByClassName('cropper-hidden') 
    [0].cropper.canvasData
    var cropBoxData = this.refs.cropper.getCropBoxData();

    if ( sessionStorage.getItem('shouldMove') === 'false' ) {
      sessionStorage.setItem( 'currentLeft', cropBoxData.left )
      sessionStorage.setItem( 'currentTop', cropBoxData.top )
      sessionStorage.setItem('shouldMove', true)
    }else {
      if (
        cropBoxData.left <= canvasData.left ||
        cropBoxData.top  <= canvasData.top  ||
        cropBoxData.left + cropBoxData.width > canvasData.width + 
        canvasData.left ||
        cropBoxData.top + cropBoxData.height > canvasData.height + 
        canvasData.top
      ) {
        cropBoxData.left = sessionStorage.getItem( 'currentLeft' )
        cropBoxData.top = sessionStorage.getItem( 'currentTop' )
      }
    }}

//render

    <Cropper
      ref='cropper'
      src={URL.createObjectURL(this.props.image)}
      aspectRatio={this.props.template.aspect_ratio}
      guides={true}
      zoomTo={ this.state.zoomValue }
      dragMode="move"
      crop={this._crop}
    />

我知道这是 sessionStorage 的噩梦,但我不能使用状态,因为它会重置整个裁剪器。我还从图像标签中获取了 canvasData,因为 cropper.canvasData() 函数在这个 react 包中不起作用。

在我上面的代码中,react 能够检测到裁剪区域在图像之外,但我不知道我应该在那里做什么。我试图将裁剪区域的位置设置为图像外部的第一个位置。但数据没有变化。

最佳答案

哇。好的,如果有人会遇到同样的问题,答案很简单,但我真的无法在任何地方找到它。 只需将 viewMode 设置为“2”,如下所示:

<Cropper
      ref='cropper'
      src={this.props.image}
      aspectRatio={ar}
      guides={true}
      zoomTo={ this.state.zoomValue }
      dragMode="move"
      crop={this._crop}
      viewMode = {2} <-----
    />

它会起作用的。

关于reactjs - React-cropper - cropBox 不在图像中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53346018/

相关文章:

cropperjs - 来自 cropperJS 的 setCropBoxData 不起作用

javascript - 为什么单击后退按钮时 popstate 不触发我的功能? (移动 ios Chrome )

javascript - 多个复选框过滤 react 状态

javascript - 未捕获的 TypeError : $(. ..).cropper 不是函数 - Cropper.js

javascript - Cropper 插件不会删除 View 窗口中的虚线

javascript - Cropper.js - 第一个参数是必需的,并且必须是 <img> 或 <canvas> 元素

javascript - 如何解决 "The following modules couldn'不热更新: (They would need a full reload!)”

css - 在 <View/> 中将两个元素彼此对齐/旁边/内联 react native

javascript - 如何在 Cropper.js 中处理比例尺和大图像?