<template>
<div
class="mapbox"
id="mapbox"
:style="'width:' + width + ';height:' + height"
>
<table
class="imgbox"
id="imgbox"
@mousedown="holdDown"
@mouseup="holdUp"
:style="'top: ' + imgtop + 'px;left: ' + imgleft + 'px;'"
border="0"
cellpadding="0"
cellspacing="0"
style="margin: 0 auto"
>
<tr>
<td>
<img
id="backgroundImg"
draggable="false"
:style="'height: ' + imgheight + '%;'"
:src="listImg"
/>
</td>
</tr>
</table>
</div>
</template>
<script>
export default {
props: {
img: {
type: String,
default: "",
},
width: {
type: String,
default: "456px",
},
height: {
type: String,
default: "500px",
},
},
data() {
return {
imgtop: 0,
imgleft: 0,
imgheight: 100,
DownUp: false,
listImg:require("../assets/1.jpg"),
};
},
mounted() {
document.onmousemove = this.mouseMove;
setTimeout(() => {
this.getbackgroundImgWidth();
}, 500);
},
beforeDestroy() {
document.onmousemove = null;
},
methods: {
leftRi(){
},
rightRi(){},
holdDown() {
this.DownUp = true;
},
holdUp() {
this.DownUp = false;
},
inBoxIsoutbox(id, ev = event || window.event) {
let map = document.getElementById(id);
if (
this.mousePosition(ev).x > map.offsetLeft + map.offsetWidth ||
this.mousePosition(ev).x < map.offsetLeft ||
this.mousePosition(ev).y > map.offsetTop + map.offsetHeight ||
this.mousePosition(ev).y < map.offsetTop
) {
return false;
} else {
return true;
}
},
mousePosition(ev) {
if (ev.pageX || ev.pageY) {
return { x: ev.pageX, y: ev.pageY };
}
return {
x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y: ev.clientY + document.body.scrollTop - document.body.clientTop,
};
},
mouseMove(ev) {
ev = ev || window.event;
if (this.inBoxIsoutbox("mapbox", ev)) {
this.runWheel(true);
} else {
this.runWheel(false);
this.holdUp();
}
if (this.DownUp) {
this.imgtop = this.imgtop + ev.movementY;
this.imgleft = this.imgleft + ev.movementX;
}
},
runWheel(isWheel) {
if (isWheel) {
document.documentElement.style.overflow = "hidden";
if (window.addEventListener) {
window.addEventListener("DOMMouseScroll", this.wheel, false);
}
window.onmousewheel = document.onmousewheel = this.wheel;
} else {
document.documentElement.style.overflow = "";
if (window.addEventListener) {
window.addEventListener("DOMMouseScroll", null, false);
}
window.onmousewheel = document.onmousewheel = null;
}
},
wheel(event) {
let delta = 0;
if (!event) event = window.event;
if (event.wheelDelta) {
delta = event.wheelDelta / 120;
if (window.opera) delta = -delta;
} else if (event.detail) {
delta = -event.detail / 3;
}
if (delta) this.handle(delta);
},
handle(delta) {
if (delta < 0) {
if (this.imgheight > 10) {
this.imgheight = this.imgheight - 1;
}
} else {
if (this.imgheight < 500) {
this.imgheight = this.imgheight + 1;
}
}
},
getbackgroundImgWidth() {
if (this.actualDistanceWidth !== 0) {
let backgroundImg = document.getElementById("backgroundImg");
this.distanceCoefficient =
backgroundImg.width / this.actualDistanceWidth;
} else if (this.actualDistanceHeight !== 0) {
let backgroundImg = document.getElementById("backgroundImg");
this.distanceCoefficient =
backgroundImg.height / this.actualDistanceWidth;
}
},
},
};
</script>
<style scoped>
.mapbox {
overflow: hidden;
position: relative;
text-align: center;
border: 1px solid red;
margin: auto;
}
.imgbox {
position: absolute;
}
.imgbox img {
cursor: pointer;
}
</style>