博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【CSON原创】CSS的障眼法:利用border实现图片的翻转
阅读量:5858 次
发布时间:2019-06-19

本文共 1746 字,大约阅读时间需要 5 分钟。

功能说明:

利用css的border实现图片的翻转效果,支持从上到下、从下到上,从左到右,从右到左四种翻转。

兼容IE 7 8 9 10 firefox chrome

效果预览:

 
 
 
 

 

实现原理:

  之所以说这是CSS的障眼法,是因为这种效果并不是使用CSS原生的属性进行实现的,并不仅仅是使用一张图片,然后通过特定属性使其翻转,因为我们知道CSS并不提供另图片翻转的接口。要实现这种效果,我们需要的是通过图片和外层div的border的配合,使图片看起来翻转了一定角度。

  细心的读者可能会发现,我在选择图片的时候,已经有所讲究,看看上面这幅图片,它具有两个特点

  1.完全对称。

  2.图形周围的空白(黑色部分)较多。

  如果不是满足上述两个特点的图片,翻转效果看起来也会没那么好,要知道原因,首先就要清楚这种翻转效果的实现原理了。

 

  以从右到左的翻转为例,使图片翻转的实现步骤

  1.首先添加一张你需要实现翻转效果的图片,图片绝对定位。

  2.然后我们需要的是一个div,div高度和图片高度相等。该div除了右边框外,其他边框为和背景色一样且borderWidth为0,右边框则为透明且borderWidth和图片宽相等,定位与图片一致,zIndex比图片大。经过这两步后,我们就可以把一个透明正方形(实质上为div的右边框)覆盖在图片上面

  3.之后我们需要的就是使右边框和图片的尺寸和大小动态改变,实现翻转效果。我们开始同时逐渐减少右边框和图片的宽度,并且同时逐渐增大上下边框的宽度和图片的高度,并且调整图片和div的定位,使它们始终保持在原位置,就可以实现图片的翻转效果。简单地说,实现视觉上翻转效果的实际上是div的右边框,但是我们通过把右边框设置为透明从而露出下面的图片,看上去就是图片在翻转。

  之所以我之前说的选择的图片最好要有上面那两个特点:完全对称和四周空白较多。那是因为如果图片不对称,那么图片翻转过去之后,图片的显示就会不合理(没有达到镜像的显示效果,显示位置不对),但是,我也在程序里提供了onHalfLoop和onFullLoop两个回调函数的接口,分别是翻转90度和180度后触发的回调函数。大家完全可以使用ps把一张图片左右(或上下)翻转,然后在onHalfLoop里把图片路径设置为该翻转后图片的路径,在onFullLoop里把路径还原,这样就可以完全克服需要使用完全对称图片这个障碍,使不对称的图片也可以实现翻转。

  至于另一个特点:使用四周空白较多的图片。使用这种图片的好处是消除翻转的时候处在图片边缘的图纹被隐藏所带来的视觉破绽,具体这里说不清楚,不过大家找一张图片四周也有较多图纹的图片试试就清楚了。

 

最后给出所有代码吧,结合代码应该就可以更清楚地了解其中的原理:

  

   
无标题文档

 

  可以看看最后的调用方法:

var b=new overturnImg('turnImg1','borderWrapper1'); b.run(); var b2=new overturnImg('turnImg2','borderWrapper2',{direction:'TTB'}); b2.run(); var b3=new overturnImg('turnImg3','borderWrapper3',{direction:'BTT'}); b3.run(); var b4=new overturnImg('turnImg4','borderWrapper4',{direction:'LTR'}); b4.run();

  我们想要使图片向不同的方向翻转,需要的就是在direction中传入不同的数值:RTL(右向左翻转)、LTR(左向右翻转)、BTT(下向上翻转)、TTB(上向下翻转)。

 

  欢迎转载,请标明出处:

 

  

转载于:https://www.cnblogs.com/Cson/archive/2012/02/01/2335087.html

你可能感兴趣的文章
关闭SQL Server 2012智能感知代码提示功能
查看>>
Unity3D实践系列11, 组件的添加和访问
查看>>
Centos7.4别名设置提高工作效率
查看>>
.Net 中枚举AppDomains
查看>>
开源C#2.0体温单程序
查看>>
LightOJ 1193 Dice (II)(区间)
查看>>
高精度地图系列
查看>>
一句代码实“.NET技术”现批量数据绑定[上篇]
查看>>
导出数据库的结构不含数据
查看>>
[转] Lazy evaluation
查看>>
用sqlplus为oracle创建用户和表空间
查看>>
什么是线程安全
查看>>
常用查找算法总结
查看>>
(转)heX——基于 HTML5 和 Node.JS 开发桌面应用
查看>>
浅析C++中的this指针
查看>>
Ajax实现简单下拉选项
查看>>
004_ssh连接慢的问题的解决?
查看>>
html的input输入框边框
查看>>
delphi TEdit设为下横线,类似填表格
查看>>
Leetcode: Sliding Window Median
查看>>