class ImagePreview { option = { l: 0, t: 0, startX: 0, startY: 0, scale: 1, rotate: 0, isLongTag: false, images: [], startPosition: 0, showPagination: false, onChange: () => { }, onClose: () => { } } constructor(option) { if (option.hasOwnProperty("images") && option.images.length != 0) { this.option.startPosition = option.startPosition || this.option.startPosition; this.option.images = option.images || this.option.images; this.option.showPagination = option.showPagination || this.option.showPagination; this.option.onChange = option.onChange || this.option.onChange; this.option.onClose = option.onClose || this.option.onClose; this.initHTML(); } else { throw new Error("images必传,images不能为空!!!") } } initHTML() { $("body").insertAdjacentHTML("beforeend", `
`); this.onEvent() } onEvent() { $(".bmy_close").onclick = () => { $("body").removeChild($(".bmy_image_preview")) this.option.onClose() } $(".bmy_prev").onclick = () => { this.option.startPosition-- this.option.startPosition < 0 ? this.option.startPosition = this.option.images.length - 1 : '' this.changeImgSrc() } $(".bmy_next").onclick = () => { this.option.startPosition++ this.option.startPosition >= this.option.images.length ? this.option.startPosition = 0 : '' this.changeImgSrc() } $(".icon-suoxiao").onclick = () => { if (this.option.scale > 0.2) { this.option.scale = Number((this.option.scale - 0.2).toFixed(1)); this.ScaleAndRotate() } } $(".icon-fangda").onclick = () => { this.option.scale += 0.2; this.ScaleAndRotate() } $(".left_xz").onclick = () => { this.option.rotate -= 90; this.ScaleAndRotate() } $(".right_xz").onclick = () => { this.option.rotate += 90 this.ScaleAndRotate() } $(".bl").onclick = () => { if ($(".bl").classList.contains("icon-fullscreen")) { $(".bmy_preview").classList.remove("sx") this.option.scale = 1 this.option.rotate = 0 this.ScaleAndRotate() } else { $(".bmy_preview").classList.add("sx") } $(".bl").classList.toggle("icon-suoxiao1") $(".bl").classList.toggle("icon-fullscreen") } $(".bmy_preview").onmousedown = (e) => { e.preventDefault() this.isLongTag = true; this.startX = e.screenX; this.startY = e.screenY; this.l = parseInt($(".bmy_preview").style.marginLeft); this.t = $(".bmy_preview").offsetTop; this.move(".bmy_preview") } $(".bmy_preview").onmouseleave = () => { if (this.isLongTag) { this.move(".bmy_image_canvas") } } $(".bmy_image_preview").onmouseup = () => { this.isLongTag = false; $(".bmy_preview").onmousemove = null $(".bmy_image_canvas").onmousemove = null } } move(className) { $(className).onmousemove = (ev) => { ev.preventDefault() var moveX = ev.screenX, moveY = ev.screenY; var newX = moveX - this.startX, newY = moveY - this.startY; $(".bmy_preview").style.marginLeft = `${newX + this.l}px`; $(".bmy_preview").style.marginTop = `${newY + this.t}px`; } } ScaleAndRotate() { $(".bmy_preview").style.transform = `scale(${this.option.scale}) rotate(${this.option.rotate}deg)` } changeImgSrc() { this.option.onChange(this.option.startPosition) $(".bmy_preview").src = this.option.images[this.option.startPosition] } } function $(className) { return document.querySelector(className) }