<template>
<div class="outer_box">
<!-- 因為旋轉(zhuǎn)是在中心點旋轉(zhuǎn)的,而放大縮小是在左上角 -->
<!-- 所以給圖片的父元素加上放大縮小 -->
<!-- 給圖片加上旋轉(zhuǎn) -->
<div class="img_box"
:style="{transform:'scale('+multiples+')',transformOrigin:'top left'}">
<img :src="imgSrc"
alt=""
:style="{transform:'rotateZ('+deg+'deg)'}">
</div>
<!-- 點擊時旋轉(zhuǎn)90度 -->
<button @click="magnify">放大</button>
<!-- 縮小0.25 -->
<button @click="shrink">縮小</button>
<!-- 放大0.25 -->
<button @click="rotate">旋轉(zhuǎn)</button>
</div>
</template>
<script>
export default{
data(){
return{
imgSrc:'https://publish-pic-cpu.baidu.com/cf60d547-a35c-4e77-8ef3-30d0e5b0e48b.jpeg@q_90,w_450',
deg:0,
multiples:1,
}
},
methods:{
// 放大
magnify(){
if(this.multiples >= 3){
return
}
this.multiples += 0.25
},
// 縮小
shrink(){
if(this.multiples <= 0.5){
return
}
this.multiples -= 0.25
},
// 旋轉(zhuǎn)
rotate(){
this.deg += 90;
if(this.deg >= 360){
this.deg = 0
}
},
}
}
</script>
<style scoped>
.outer_box{
width: 200px;
height: 200px;
}
.outer_box>div{
white-space: nowrap;
display: inline-block;
}
.outer_box>div>img{
width: auto;
height: auto;
position: absolute;
}
</style>
可以看到現(xiàn)在的圖片霞揉,已經(jīng)具備放大縮小及旋轉(zhuǎn)的功能了,但是這個方法會造成圖片的遮擋晰骑,所以還需要做一個拖動圖片的功能
在main.js里面全局定義一個拖動指令适秩,也可在局部定義。
//自定義拖動
Vue.directive('drag',
function (el, binding) {
let oDiv = el; //當(dāng)前元素
oDiv.onmousedown = function (e) {
e.preventDefault();
let bw = document.body.clientWidth;
let bh = document.body.clientHeight;
//鼠標(biāo)按下,計算當(dāng)前元素距離可視區(qū)的距離
let disX = e.clientX - oDiv.offsetLeft;
let disY = e.clientY - oDiv.offsetTop;
// 計算兩邊坐標(biāo)
document.onmousemove = function (e) {
let l = 0, t = 0;
// 拖動邊界
if (e.clientX >= bw) {
l = bw - disX;
} else if (e.clientX <= 0) {
{
l = 0- disX;
}
} else {
l = e.clientX - disX;
}
if (e.clientY >= bh) {
t = bh - disY;
}else if(e.clientY <= 0) {
t = 0- disY;
}
else {
t = e.clientY - disY;
}
//移動當(dāng)前元素
oDiv.style.left = l + 'px';
oDiv.style.top = t + 'px';
};
// 鼠標(biāo)停止移動時秽荞,事件移除
document.onmouseup = function (e) {
document.onmousemove = null;
document.onmouseup = null;
};
};
}
);
最后給當(dāng)前圖片的元素加上v-drag骤公,以及position: absolute;的樣式,圖片就能正常的拖動了
<img :src="imgSrc"
:style="{transform:'rotateZ('+deg+'deg)'}"
v-drag>