vue 自定义指令封装点击事件并插入DOM元素节点,并传参

94 篇文章 7 订阅

需求:点击小图出现查看大图
这是在element上进行修改
在这里插入图片描述
在这里插入图片描述
html中使用v-click-preview-img指令

 <el-image v-click-preview-img="{ licensePlate: item.licensePlate ,times: item.times,srcList: item.srcList }" class="imag" v-if="item.imgUrl" :src="item.imgUrl" :preview-src-list="item.srcList">
 </el-image>

自定义指定

/*
 * @Author: your name
 * @Date: 2021-07-26 10:26:19
 * @LastEditTime: 2021-07-26 11:57:13
 * @LastEditors: Please set LastEditors
 * @Description: 查看大图指令
 * @FilePath: \vue-ui\src\directive\previewImg\index.js
 */
import Vue from 'vue'
export default Vue.directive('clickPreviewImg', {
    bind: function(el, binding) {
        el.onclick = event => {
            event.stopPropagation()
            const { licensePlate, times, srcList } = binding.value
            const viewerCanvas = document.getElementsByClassName(
                'el-image-viewer__canvas'
            )[0]
            // 判断有class并有大图
            if (viewerCanvas && srcList.length > 0) {
                viewerCanvas.style = 'position: relative'
                setTimeout(() => {
                    const viewImg = viewerCanvas.getElementsByClassName(
                        'el-image-viewer__img'
                    )[0]
                    const left = viewImg.getBoundingClientRect().left
                    const top =
                        viewImg.getBoundingClientRect().top > 60
                            ? viewImg.getBoundingClientRect().top - 60
                            : viewImg.getBoundingClientRect().top
                    const box = document.createElement('div')
                    box.setAttribute(
                        'style',
                        `position:absolute;top:${top}px;z-index: 100;color: #ccc;left: ${left}px;line-height: 26px;font-size: 18px;`
                    )
                    box.innerHTML = `<div style='font-weight: bold;'>${licensePlate}</div><div>${times}</div>`
                    viewerCanvas.insertBefore(box, viewerCanvas.childNodes[0])
                }, 100)
            }
        }
    },
    unbind(el, binding) {
        // 解除事件监听
        delete binding.rawName
    }
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周家大小姐.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值