CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大


Posted in HTML / CSS onDecember 10, 2012

图片放大,这是一个比较容易的效果了。当然,今天说的可不是简简单单的在一个框里放大,而是一个圆。就像放大镜或是狙击镜那样,只有圆圈里的放大,圈外的当然还是原来的图片。这是不是很不可思议? 当然不是。做过Flash的也许会脱口而出:套个蒙版就是了。可惜CSS不是Flash,没有那一套。我们只有从CSS里面慢慢挖掘。

先说IE,因为IE有滤镜,可以实现许多意想不到的功能。先来整理下我们的目标:

效果演示 

提示:您可以先修改部分代码再运行

放大一副图片
  1. 只显示其中的一个圆
  2. 圆外是透明的

图片的缩放可以通过img元素的拉伸来实现。接着盖上一张透明像素画的实心圆,因此正好只显示出放大后中心圆圈部分。但第3步可就不对了,虽然之前加盖了一张透明圆形的gif图片,屏幕上确实出现了一个放大过的圆形图片,但圆圈的外面却变成加盖图片的背景色了,因为这张图片是在最上层了。到此你或许在想给其中某些元素加些透明度什么的,事实上无论给哪个层加透明度都是徒劳的。因为此时无非就两种情况:圆圈外被背景色覆盖;背景色透明的话就是一个矩形的放大,而不是圆形。我们所希望的是:蒙版的背景色透明,并且在此位置下面的放大图也跟着透明。

对于IE来说,这并非难事,因为IE有滤镜。如果你熟悉的话应该早就想到了Chroma滤镜,这是一个很重要的滤镜,因为他能把一个层里的指定颜色变成透明色!这不正是我们期待吗。我们新建一个层,层里面分别叠上放大图片(后)和蒙版图片(前),就是为了让他们合并到这个新建层里。我们给这个新建层设置Chroma滤镜,因为他们的子层都在此合并像素了,所以圆圈外那部分背景色透明后,取而代之的就是原图片。这就是我们最终想要的效果。

值得注意的是,Chroma滤镜在给指定的蒙版背景色透明的时候,圆圈里同样的颜色也会一起透明掉,所以要给蒙版设置一个非常少见的背景色,尽可能减少圆圈里的透明像素点。

IE上面的解决方案还算简单,非IE的呢?你当然会说canvas,因为图形方面他是万能的。如果CSS上确实找不到办法,我们也只能用canvas。不过可别忘了那些非IE的主流浏览器几乎都是支持CSS3的。CSS3虽然没有像Chroma滤镜那样的效果,但是对于本例这样的效果还是绰绰有余的:因为我们只想要一个放大了的圆形图片,而CSS3天生就支持画圆。

CSS3支持层的圆角,例如border-radius:5px,就能给层的4个方角变为半径5px的圆角。我们不妨将其运用到极限,给一个100*100的层设置一个border-radius:50px圆角,这时可就是一个圆滚滚的层了!层里面的内容当然不会限制在圆角里面,但层的背景图片会。并且CSS3是支持背景图片缩放的,本例到此也就迎刃而解了。

CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大

前面关键的问题都以解决,下面就实现一个狙击瞄准器的效果,并支持滚轮缩放。为了使代码更清晰,本例分别为IE,FF及其他浏览器做了3个版本,通过Demo页面能够自动转跳。

当然,如果再改进的话我们还可以用png图片作为蒙版,带上一些渐变的透明度,就更像玻璃的材质了。

HTML / CSS 相关文章推荐
CSS心形加载的动画源码的实现
Mar 09 HTML / CSS
让IE6、IE7、IE8支持CSS3的脚本
Jul 20 HTML / CSS
css3背景图片透明叠加属性cross-fade简介及用法实例
Jan 08 HTML / CSS
深入CSS3 动画效果的总结详解
May 09 HTML / CSS
CSS类名支持中文命名的示例
Apr 04 HTML / CSS
利用css3如何设置没有上下边的列表间隔线
Jul 03 HTML / CSS
浅谈pc和移动端的响应式的使用
Jan 03 HTML / CSS
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
Jan 31 HTML / CSS
HTML5 History API 实现无刷新跳转
Jan 11 HTML / CSS
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
Jan 20 HTML / CSS
用canvas显示验证码的实现
Apr 10 HTML / CSS
AmazeUI 导航条的实现示例
Aug 14 HTML / CSS
CSS3制作半透明边框(Facebox)类似渐变
Dec 09 #HTML / CSS
CSS伪类与CSS伪元素的区别及由来具体说明
Dec 07 #HTML / CSS
用CSS禁用输入法(CSS3 UI规范)实例解析
Dec 04 #HTML / CSS
html5 css3 动态气泡按钮实例演示
Dec 02 #HTML / CSS
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
Nov 29 #HTML / CSS
CSS3悬停效果案例应用
Nov 21 #HTML / CSS
在css3中background-clip属性与background-origin属性的用法介绍
Nov 13 #HTML / CSS
You might like
php牛逼的面试题分享
2013/01/18 PHP
php中require和require_once的区别说明
2014/02/27 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
JS获取整个页面文档的实现代码
2011/12/15 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
常用python编程模板汇总
2016/02/12 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
为什么Python中没有"a++"这种写法
2018/11/27 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
python实现简单学生信息管理系统
2020/04/09 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
2020/12/21 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
冰淇淋店的创业计划书
2014/02/07 职场文书
优秀老员工获奖感言
2014/02/15 职场文书
影视广告专业求职信
2014/09/02 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
会计专业自荐信范文
2015/03/05 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android