vue 弹窗出现带动画效果(从按钮位置滑出并从小变大的弹窗)

大概效果:
在这里插入图片描述
用vue3写的,不过逻辑都一样 主要是js+css;
实现方法逻辑:①先写弹窗的div,用fixed布局,确定弹窗的位置;②绑定鼠标点击事件,主要是获得按钮和弹窗在屏幕的位置 计算定位用;③给弹窗写上css动画; ④绑定按钮的点击事件,让弹窗出现

代码就分成html、css、js 三部分写,方便复制直接使用

一、html部分

 <div class="addBtn" @click="show=!show">打开一个弹窗(带动画)</div>
 <div class="test element" v-if="show"></div>

二、js部分

绑定鼠标点击事件是配合css使用,目的是拿到按钮和弹窗在屏幕的位置,拿到之后js部分其实可以删除,并没有什么用
鼠标点击一下按钮的拿到按钮的位置,比如x y是300 100;再点一下弹窗中心位置,比如是 1000 600,然后使用弹窗的X轴减按钮的X轴:1000-300=700,再使用弹窗的Y轴减按钮的Y轴:600-100=500 ;自己记住这两个坐标的距离差 是 700 500

//控制弹窗显示隐藏
let show = ref(false)
//获取鼠标点击的位置
function savePoint(event) {
  let xPoint = event.pageX
  let PPoint = event.pageY
  console.log(event.pageX, event.pageY)
}
onMounted(() => {
  window.addEventListener('click', savePoint)
})

三、css(重点)

为什么是负数:因为transform-origin属性,默认以此元素为中心,所以你点击弹窗的x轴y轴就可以作为0,0,按钮在弹窗的左边或下边就是负、在右边或上边就为正;
ps:计算的不那么精准的话;自己调试调试++ - -

<style scoped lang="scss">
@keyframes scaleAnimation {
  0% {

    transform: scale(0);
    transform-origin: -700px -500px;//这里就是js计算出来的坐标差
  }
  100% {
    transform: scale(1);
    transform-origin: 0 0px;
  }
}
.element {
  animation: scaleAnimation 1s ease-out forwards;//绑定动画
}
//基础样式以及位置
.test {
  width: 300px;
  height: 200px;
  position: fixed;
  top: 474px;
  left: 860px;
  background: pink;
}
<style>

不知道说明白没有:js部分配一张图,就是计算红线的距离(两条红线是x和y哈,顺手写成了两个x)
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值