使用perspective和transform实现容器上的悬浮效果

本文介绍如何通过CSS的perspective和transform属性,结合JavaScript,实现在鼠标悬停时让容器产生3D倾斜效果。教程详细讲解了设置、JavaScript事件处理、更新鼠标位置样式、CSS自定义属性等步骤,帮助读者理解并实现动态交互效果。
摘要由CSDN通过智能技术生成

特别声明:此篇文章内容来源于@MIHAI IONESCU的《Animate a Container on Mouse Over Using Perspective and Transform》一文。

我一直在做一个网站,这个网站主要用来向用户展示大型图片。我没有创建一个典型的Lightbox效果,而是尝试让一些交互效果更有意思。最后的效果是我在一个容器上添加了一个效果,当用户把鼠标悬浮在图片(用户鼠标移动图片上)时,它会倾斜(鼠标移动到不同的角度时,向不同的方向倾斜)。

最终的效果如下:

这个效果是通过CSS和JavaScript实现的。我想通过这个教程来解释每个部分是如何工作的,这样你就可以很容易地复杂或者扩展它。

在开始之前,我建议你阅读一下perspectivetransfrom相关的教程。在这篇文章中介绍的效果将会使用这些属性,熟悉它们有助于你更好的理解下面的内容。

那我们开始今天的教程学习吧。

设置

首先我们需要在一个容器中放置一个元素。这个容器将有助于我们使用perspective属性。

<div id="container">    <div id="inner"></div>
</div>

为了演示的目的,把卡片放在屏幕的正中:

body {    
   width: 100%;    min-height: 100vh;    display: flex;    justify-content: center;    align-items: center;    margin: 0;    background-color: rgb(220, 220, 220);
}

#container {    
   perspective: 40px;
}

#inner {    
   width: 20em;    height: 18em;    background-color: white;
}

我们创建了一张白色的卡片,它位于屏幕(浅灰色背景)的正中(水平垂直居中于屏幕)。注意,我们给#container设置了perspective的值为40px。在这一点上我们什么也没有做,因为我们没有创建任何transform。这将在稍后的JavaScript中处理。

(function(){    // 初始化    var container = document.getElementById('container'),        inner = document.getElementById('inner'); })()

开始添加JavaScript脚本

下面将是我们需要的一些功能:

var container = document.getElementById('container'),    inner = document.getElementById('inner'); var onMouseEnterHandler = function (event) {    

要产生旋转木马效果,需要使用CSS的transform-styleperspective属性。 1. 首先,在父元素上添加transform-style: preserve-3d;,让子元素位于三维空间中。 2. 然后,在父元素上添加perspective属性,指定透视距离,产生立体效果。 3. 接着,在子元素上设置transform: rotateY(angle),使子元素绕Y轴旋转,产生旋转木马效果。 以下是示例代码: HTML代码: ``` <div class="carousel"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> <div class="item">Item 4</div> <div class="item">Item 5</div> </div> ``` CSS代码: ``` .carousel { width: 400px; height: 300px; margin: 0 auto; position: relative; transform-style: preserve-3d; perspective: 1000px; } .item { position: absolute; width: 300px; height: 200px; background-color: #ccc; text-align: center; line-height: 200px; font-size: 24px; transition: transform 1s; } .item:nth-child(1) { transform: rotateY(0deg) translateZ(200px); } .item:nth-child(2) { transform: rotateY(72deg) translateZ(200px); } .item:nth-child(3) { transform: rotateY(144deg) translateZ(200px); } .item:nth-child(4) { transform: rotateY(216deg) translateZ(200px); } .item:nth-child(5) { transform: rotateY(288deg) translateZ(200px); } .carousel:hover .item { transform: rotateY(36deg); } ``` 在这个示例中,旋转木马的父元素是一个div.carousel,子元素是div.item。在.carousel上设置了transform-style: preserve-3d;和perspective: 1000px;,使子元素位于三维空间中,并产生立体效果。在.item上设置了transform: rotateY(angle)和transition: transform 1s;,使子元素绕Y轴旋转,并且在1秒内完成旋转。在.carousel:hover .item中,设置了旋转的角度为36度,使旋转更加流畅。 通过这种方式,就可以使用CSS的transform-styleperspective属性,结合使用产生旋转木马效果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值