功能主要包括:下载图片、等比缩放、旋转、全屏拖拽
用法:
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