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 相关文章推荐
检测用户浏览器是否支持CSS3的方法
Aug 29 HTML / CSS
css3实现针线缝合效果(图解步骤)
Feb 04 HTML / CSS
通过一张图教会你CSS3倒影的实现
Sep 26 HTML / CSS
CSS3 实现图形下落动画效果
Nov 13 HTML / CSS
HTML5的video标签的浏览器兼容性增强方案分享
May 19 HTML / CSS
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
Mar 15 HTML / CSS
通过Canvas及File API缩放并上传图片完整示例
Aug 08 HTML / CSS
HTML5所有标签汇总及标签意义解释
Mar 12 HTML / CSS
详解HTML5中download属性的应用
Aug 06 HTML / CSS
基于html5 DeviceOrientation 实现微信摇一摇功能
Sep 25 HTML / CSS
AmazeUI 输入框组的示例代码
Aug 14 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
Sep 23 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在字符断点处截断文字的实现代码
2011/04/21 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
php中的异常和错误浅析
2017/05/03 PHP
MSN消息提示类
2006/09/05 Javascript
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
编写Js代码要注意的几条规则
2010/09/10 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
vue + element-ui的分页问题实现
2018/12/17 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
Python代码调试的几种方法总结
2015/04/15 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
django项目中新增app的2种实现方法
2020/04/01 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
英国现代市场:ARKET
2019/04/10 全球购物
争论的故事教学反思
2014/02/06 职场文书
小区推广策划方案
2014/06/06 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
如何写好开幕词?
2019/06/24 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers