引言
我们有时看到一些网站有的照片,当我们将鼠标移入的时候,会有个放大的动画效果,今天我就来讲讲这个效果是如何实现的。
demo
最终实现效果:点击进入
涉及知识点
transform : scale()
transition
如何实现
1 | Ps : demo 以 Webkit 为例,其它浏览器内核请自行加上如 -moz- 等前缀。 |
HTML的基本结构
我们需要一个 pic 来作为 3D 场景,里面有一个 img 标签作为图片的容器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <! DOCTYPE html> < html > < head > < meta charset = "UTF-8" > < title >放大镜效果</ title > < style > </ style > </ head > < body > < div id = "pic" > < img src = "img/pic.jpg" > </ div > </ body > </ html > |
#pic 的基本 CSS
设定高、宽、居中效果、背景颜色(实际上图片会覆盖掉),同时超出部分hidden。
1 2 3 4 5 6 7 | #pic{ height : 480px ; width : 480px ; margin : 0 auto ; background-color : #ccc ; overflow : hidden ; } |
设置 img 的初始样式
由于要保证放大后的清晰度,所以往往做这个效果的照片在鼠标未移入前会缩小显示,而hover后才恢复正常比例。
我使用的照片是 960px × 960px 的,初始时设置照片缩小到原来的 0.5 倍(这也是为什么上面的#pic我设置高和宽都为480px)。
图片默认是中心放大/缩小的,所以初始化时我们缩小到 0.5 倍时图片四周会有一定的“空隙”,我们可以使用 margin 的方法来解决这个问题。
1 2 3 4 | #pic img{ margin : -240px 0 0 -240px ; -webkit-transform: scale(. 5 ); /* 默认显示 0.5 倍的照片 */ } |
为了有渐渐放大的动画效果,可以使用 transition 属性:
1 | -webkit-transition: 1 s; |
设置 img 的移入效果
通过 :hover 这个伪类来改变 transform 属性以实现放大效果。
1 2 3 | #pic img:hover{ -webkit-transform: scale(. 6 ); } |
所有代码
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 | <! DOCTYPE html> < html > < head > < meta charset = "UTF-8" > < title >放大镜效果</ title > < style > #pic{ height:480px; width:480px; margin:0 auto; background-color: #ccc; overflow: hidden; } #pic img{ margin:-240px 0 0 -240px; -webkit-transform: scale(.5); -webkit-transition: 1s;} #pic img:hover{ -webkit-transform: scale(.6); } </ style > </ head > < body > < div id = "pic" > < img src = "img/pic.jpg" > </ div > </ body > </ html > |
结尾
至此,效果完成!
此代码在 GitHub 上托管:点击浏览
哪里有更多demo?
欢迎浏览我的 GitHub - demos 仓库 获得更多的demo。