vue - 自定义吸附窗口

业务需求

以共享单车界面为例,地图上分布着大量的共享单车,鼠标悬浮在单车上,弹出一个吸附弹窗,内容显示单车详细信息。

分析

很明显,因为单车的数量可能非常多,我们不可能用显示隐藏的方式实现;

合理的做法是,所有单车公用一个弹窗面板,悬浮的时候刷新面板上的数据。

方案

看着改吧,element-ui里头现成的组件

<template>
  <!-- 定位元素 -->
  <div class="my-picker">
    <!-- vue-popper组件 -->
    <Popper ref="popper" v-model="showPopper">
    </Popper>
    <el-button @click="click">click</el-button>
    <el-button @click="click">click</el-button>
    <el-button @click="click">click</el-button>
    <el-button @click="click">click</el-button>
    <el-button @click="click">click</el-button>
    <el-button @click="click">click</el-button>
    <!-- 弹出组件 -->
    <div ref="fly-piece" v-show="showPopper" class="my-picker__popper">你看,我弹出来了</div>
  </div>
</template>

<script>
// 引入vue-popper组件
import Popper from 'element-ui/src/utils/vue-popper';

Popper.render = (h) => h(null);

export default {
    components: {
        Popper
    },
    data() {
        return {
            // 双向绑定,控制弹出层是否弹出
            showPopper: false
        }
    },
    methods: {
        click: function (evt) {
			// 切换吸附 dom 元素
            this.$refs.popper.referenceElm = evt.target;
            this.$refs.popper.createPopper();
            this.showPopper = !this.showPopper;
            console.log(this.showPopper);
        }
    },
    mounted() {
        // 弹出层
        this.$refs.popper.popperElm = this.$refs['fly-piece'];
        // 定位层
        this.$refs.popper.referenceElm = this.$el;
    }
}
</script>

posted on   疯狂的妞妞  阅读(28)  评论(0编辑  收藏  举报

(评论功能已被禁用)
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2022-10-24 java反射 - 获取函数参数名
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示