vue 快速給圖片添加,點擊旋轉、放大、縮小、拖動的效果

<template>
    <div class="outer_box">
        <!-- 因為旋轉是在中心點旋轉的,而放大縮小是在左上角 -->
        <!-- 所以給圖片的父元素加上放大縮小 -->
        <!-- 給圖片加上旋轉 -->
        <div class="img_box"
             :style="{transform:'scale('+multiples+')',transformOrigin:'top left'}">
            <img :src="imgSrc" 
             alt=""
             :style="{transform:'rotateZ('+deg+'deg)'}">    
        </div>
        <!-- 點擊時旋轉90度 -->
        <button @click="magnify">放大</button>
        <!-- 縮小0.25 -->
        <button @click="shrink">縮小</button>
        <!-- 放大0.25 -->
        <button @click="rotate">旋轉</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
            },
            // 旋轉
            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)在的圖片,已經具備放大縮小及旋轉的功能了,但是這個方法會造成圖片的遮擋,所以還需要做一個拖動圖片的功能
在main.js里面全局定義一個拖動指令,也可在局部定義。

//自定義拖動
Vue.directive('drag',
     function (el, binding) {
        let oDiv = el;   //當前元素
         oDiv.onmousedown = function (e) {
            e.preventDefault();
            let bw = document.body.clientWidth;
            let bh = document.body.clientHeight;
            //鼠標按下,計算當前元素距離可視區(qū)的距離
             let disX = e.clientX - oDiv.offsetLeft;
             let disY = e.clientY - oDiv.offsetTop;
             // 計算兩邊坐標
             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;
                 }
                 //移動當前元素
                 oDiv.style.left = l + 'px';
                 oDiv.style.top = t + 'px';
             };
             // 鼠標停止移動時,事件移除
             document.onmouseup = function (e) {
                 document.onmousemove = null;
                 document.onmouseup = null;
             };
         };
     }
 );

最后給當前圖片的元素加上v-drag,以及position: absolute;的樣式,圖片就能正常的拖動了

<img :src="imgSrc"
    :style="{transform:'rotateZ('+deg+'deg)'}"
     v-drag>    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容