Bootstrap

react实现图片预览组件

功能主要包括:下载图片、等比缩放、旋转、全屏拖拽

用法:

import ImgPreview from '@/components/ImgPreview'
{/* 图片预览组件 */}
<ImgPreview
  visible={previewVisible}  // 是否可见
  onClose={this.closePreview} // 关闭事件
  src={licenceUrl} // 图片url
  picKey={currentKey} // 下载需要的key,根据自己需要决定
  isAlwaysCenterZoom={false} // 是否总是中心缩放,默认false,若为true,每次缩放图片都先将图片重置回屏幕中间
  isAlwaysShowRatioTips={false} // 是否总提示缩放倍数信息,默认false,只在点击按钮时提示,若为true,每次缩放图片都会提示
/>

ImgPreview.js

// message缩放倍数提示,基于antd实现

import './style.less'
import React from 'react'
import config from '@/config'
import {message} from 'antd'

export default class ImgPreview extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      screenHeight: 0,
      screenWidth: 0,
      ratio: 1,
      angle: 0,
      defaultWidth: 'auto',
      defaultHeight: 'auto',
      imgSrc: '',
      posTop: 0,
      posLeft: 0,
      isAlwaysCenterZoom: false, // 是否总是中心缩放
      isAlwaysShowRatioTips: false, // 是否总是显示缩放倍数信息,默认点击按钮缩放时才显示
      flags: false,
      isDraged: false,
      position: {
        x: 0,
        y: 0
      },
      nx: '',
      ny: '',
      dx: '',
      dy: '',
      xPum: '',
      yPum: ''
    }
    this.percent = 100
  }

  componentDidMount() {
    this.setState({
      screenWidth: window.screen.availWidth,
      screenHeight: window.screen.availHeight,
      ratio: 1,
      angle: 0
    }, () => {
      this.getImgSize()
    })
  }

  componentWillReceiveProps (nextProps) {
    this.setState({
      imgSrc: nextProps.src,
      isAlwaysCenterZoom: nextProps.isAlwaysCenterZoom,
      isAlwaysShowRatioTips: nextProps.isAlwaysShowRatioTips
    }, () => {
      this.getImgSize()
    })
  }

  // 获取预览图片的默认宽高和位置
  getImgSize = () => {
    let {ratio, isDraged, isAlwaysCenterZoom} = this.state
    let posTop = 0
    let posLeft = 0
    // 图片原始宽高
    let originWidth 
;