此处我们想实现的就是鼠标悬停在某张卡片上,该卡片就会放大,有一种卡片上浮的感觉。
预知识
变形transform
https://www.jyshare.com/codedemo/3391/这个网站包含了常见的所有变形
常见参数:
translate
:平移scale
:放缩rotate
:旋转skew
:倾斜旋转
过度动画transition
常见参数:
- 需要过渡的属性名称
- 效果持续时间
- 过度曲线
- 过渡延迟
类列表classList
常见参数:
add
:添加类名,可以同时添加多个contains
:判断类名是否存在item
:返回对应索引的类名remove
:删除类名,可同时删除多个toggle
:删除或添加类名,如果该元素存在该类名则删除,如果没有该类名则添加。一个字形容:贱!
鼠标事件
鼠标使用
click
dbclick
mousedown
mouseup
mousemove
moveout
moveenter
:不冒泡moveleave
:不冒泡
鼠标事件对象
event.type
event.target
event.clientX
:针对窗口event.clientY
event.pageX
:针对页面event.pageY
event.button
冒泡:存在于父元素和子元素之中,有点像链式反应,触发子元素的事件时会导致父元素事件的触发。
捕获:与冒泡相反,从父元素传播到子元素
代码
<!DOCTYPE html>
<html>
<head>
<style>
/*设置画布*/
body{
/* 方便排列与对齐*/
display: flex;
/*画布布满整个窗口*/
height: 100vh;
/*水平居中*/
justify-content: center;
/*垂直居中*/
align-items: center;
/* 设置比较暗的背景色*/
background-color: rgba(47,48,49,0.9);
margin: 0;
}
/*设置活动区域*/
.container{
display: flex;
justify-content: center;
align-items: center;
/*给子元素提供相对描点*/
position: relative;
width: 500px;
height: 500px;
}
.card{
/*表示该元素会以相对锚点改变位置*/
position: absolute;
width: 150px;
height: 200px;
display: flex;
justify-content: center;
align-items: center;
font-size: 30px;
font-weight: bold;
background-color: #00ff44;
transform: scale(1.0);
/*设置阴影,切记参数之间不要有逗号*/
box-shadow: 0px 8px 8px rgba(0,0,0,0.8);
/*控制放缩的时间 如果没有这句放缩就会很僵硬*/
transition: transform 0.5s;
}
.card1{
left: 0;
top:0;
}
.card2{
left:300;
top:100p;
}
/*利用多类名来实现放缩*/
.select{
transform: scale(1.2);
}
</style>
</head>
<body>
<div class="container">
<div class="card card1" id="card1">Card1</div>
<div class="card card2 ">Card2</div>
</div>
</body>
<script>
const card1 = document.getElementById("card1")
card1.addEventListener("mouseenter",()=>{
card1.classList.toggle("select")
})
card1.addEventListener("mouseleave",()=>{
card1.classList.toggle("select")
})
</script>
</html>