import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
|
import LostPng from '@/assets/img/lost.png'
|
import MKEmitter from '@/utils/events.js'
|
|
import './index.scss'
|
|
class MkPicture extends Component {
|
static propTpyes = {
|
style: PropTypes.object,
|
scale: PropTypes.bool,
|
url: PropTypes.string,
|
urls: PropTypes.array,
|
}
|
|
state = {
|
url: '',
|
lost: false
|
}
|
|
UNSAFE_componentWillMount() {
|
const { url } = this.props
|
|
if (url) {
|
this.setState({url: url, lost: false})
|
this.checkUrl(url)
|
} else {
|
this.setState({url: LostPng, lost: true})
|
}
|
}
|
|
UNSAFE_componentWillReceiveProps (nextProps) {
|
if (nextProps.url) {
|
if (nextProps.url !== this.state.url) {
|
this.setState({url: nextProps.url, lost: false})
|
this.checkUrl(nextProps.url)
|
}
|
} else {
|
this.setState({url: LostPng, lost: true})
|
}
|
}
|
|
checkUrl = (url) => {
|
let img = new Image()
|
img.addEventListener('error', this.loadHandler)
|
|
if (/^https/.test(window.location.protocol)) { // https转换
|
if (/^http:/.test(url)) {
|
img.src = url.replace(/^http:/, 'https:')
|
} else if (/^\/\//.test(url)) {
|
img.src = 'https:' + url
|
} else {
|
img.src = url
|
}
|
} else {
|
img.src = url
|
}
|
}
|
|
loadHandler = (e) => {
|
this.setState({url: LostPng, lost: true})
|
}
|
|
render() {
|
const { style, scale, urls } = this.props
|
const { url, lost } = this.state
|
|
return (
|
<div
|
className={'ant-mk-picture' + (scale ? ' scale' : '') + (lost ? ' lost' : '')}
|
onClick={(e) => {
|
if (!scale) return
|
|
e.stopPropagation()
|
|
MKEmitter.emit('mkImageScale', url, urls)
|
}}
|
style={{...style, backgroundImage: `url('${url}')`}}
|
></div>
|
)
|
}
|
}
|
|
export default MkPicture
|