• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >css3 > CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大

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

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-02

本文主要包含css代码圆形,css图片圆形,css圆形,css实现圆形,css写圆形等相关知识,佚名 希望在学习及工作中可以帮助到您

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

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

效果演示 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>CSS放大将效果</title> <style> html, body { border: none; overflow: hidden; } body { background: url(http://files.weikejianghu.com/file_images/article/201212/201212101129555.jpg); cursor: crosshair; } #divBox { position: absolute; } #divBox * { position: absolute; } #divMask { width: 160px; height: 160px; border-radius: 80px; background: #000 url(http://files.weikejianghu.com/file_images/article/201212/201212101129555.jpg) no-repeat; } #divZoom { width: 100px; left: 60px; top: 135px; font-size: 9px; font-family: "Times New Roman"; -webkit-text-size-adjust: none; color: #FFF; } </style> </head> <body ondragstart="return false"> <div id="divBox" style="left: 720px; top: 218px; "> <div id="divMask" style="background-size: 2560px 1600px; background-position: -1520px -516px; "></div> <img src="http://files.weikejianghu.com/file_images/article/201212/201212101129556.gif"> <div id="divZoom">ZOOM 2.0</div> </div> <script> function $(v){return document.getElementById(v)} var styBox = $("divBox").style; var styMask = $("divMask").style; var RATE_MIN = 1.5; var RATE_MAX = 4; var RATE_INC = 0.1; var IMG_W = 1280; var IMG_H = 800; var ZoomRate = 2; ImgZoom(); function ImgZoom() { var width = Math.round(IMG_W * ZoomRate); var height = Math.round(IMG_H * ZoomRate); styMask.backgroundSize = width + "px " + height + "px"; $("divZoom").innerHTML = "ZOOM " + ZoomRate.toFixed(1); } function ImgMove(x,y) { var left = Math.round(-ZoomRate * x + 80); var top = Math.round(-ZoomRate * y + 80); styMask.backgroundPosition = left + "px " + top + "px"; } document.onmousedown = function() { event.preventDefault(); } document.onmousemove = function() { styBox.pixelLeft = event.x - 80; styBox.pixelTop = event.y - 80; ImgMove(event.x, event.y); } document.onmousewheel = function() { ZoomRate += (event.wheelDelta>0?RATE_INC:-RATE_INC); if(ZoomRate < RATE_MIN) ZoomRate = RATE_MIN; else if(ZoomRate > RATE_MAX) ZoomRate = RATE_MAX; ImgZoom(); ImgMove(event.x, event.y); } </script> </body> </html>
提示:您可以先修改部分代码再运行</div>
放大一副图片
  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是支持背景图片缩放的,本例到此也就迎刃而解了。

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

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

</div>

您可能想查找下面的文章:

  • 纯CSS绘制漂亮的圆形图案效果
  • CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大

相关文章

  • 2017-06-02css3动画效果小结(推荐)
  • 2017-06-02用CSS3实现背景渐变的方法
  • 2017-06-02使用CSS3设计地图上的雷达定位提示效果
  • 2017-06-02举例详解CSS3中的Transition
  • 2017-06-02CSS3属性background-size使用指南
  • 2017-06-02CSS3中的注音对齐属性ruby-align用法指南
  • 2017-06-02CSS3的transition和animation的用法实例介绍
  • 2017-06-02CSS3使用border-radius属性制作圆角
  • 2017-06-02css3的transition效果和transfor效果示例介绍
  • 2017-06-02CSS3+DIV实现漂亮的动画彩色标签

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • 用CSS3实现背景渐变的方法
    • 使用css3实现的tab选项卡代码分享
    • CSS书写规范、顺序和命名规则
    • 前端制作动画的几种方式(css3,js)
    • CSS3的文字阴影—text-shadow的使用方法
    • 使用简单的CSS3属性实现炫酷读者墙效果
    • CSS3支持IE6, 7, and 8的边框border属性
    • 简单掌握CSS3中resize属性的用法
    • CSS3 简写animation
    • 细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有