CODE大全
您的位置 : 首页 > 前端技术 >

使用clip-path实现任意元素的碎片飞入动画效果

发布时间:『 2018-04-12

clip-path 是CSS3 中的一个属性。该属性可以防止部分元素通过定义的剪切区域来显示,仅通过显示的特殊区域。剪切区域是被URL定义的路径代替行内或者外部svg,或者定义路线的方法例如circle()。clip-path属性代替了现在已经弃用的剪切 clip属性。

clip-path之所以没有很普及,是因为其浏览器兼容问题。很多IE浏览器对齐属性不是很支持。我们看下他的浏览器兼容:

clip-path 浏览器兼容性

IE完全不支持,尽量使用webkit内核,需要加上内核前缀-webkit-。

clip-path 语法

关于 clip-path 语法介绍的文章不是很多,我这里贴一个总结。

clip-path: none; 
clip-path: url(resources.svg#c1);
clip-path: fill-box;
clip-path: stroke-box;
clip-path: view-box;
clip-path: margin-box
clip-path: border-box
clip-path: padding-box
clip-path: content-box
clip-path: inset(100px 50px);
clip-path: circle(50px at 0 100px);
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0%http://www.bdx-leb.com/1842/bceb4b867921.html 50%);
clip-path: padding-box circle(50px at 0 100px);
clip-path: inherit;
clip-path: initial;
clip-path: unset;

http://www.bdx-leb.com/36f2/250834e23312.html部分参数解释

url():代表剪切元素的路径 inset(), circle(), ellipse(), polygon():一个http://www.bdx-leb.com/9706/6d51c7f90da5.html <basic-shape> 方法. 这种形状将会利用指定的<geometry-box>来定位和固定基本形状。如果没有geometry box(几何盒模型)特别指出的话,border-box将会是默认的盒模型。 <geometry-box>如果同<basic-shape>一起声明,它将为基本形状提供相应的参考盒子。通过自定义,它将利用确定的盒子边缘包括任何形状边角(比如说,被border-radius定义的剪切路径)。几何体盒子将会有以下的值:
fill-box
利用对象边界框作为引用框。
stroke-box
使用笔触边界框作为引用框
view-box
使用最近的SVG视口作为引用框。如果viewBox 属性被指定来为元素创建SVG视口,引用框将会被定位在坐标系的原点,引用框位于由view-box属性建立的坐标系的原点,引用框的尺寸用来设置viewbox属性的宽高值。
margin-box
使用 margin box 作为引用框
border-box
使用 border box 作为引用框.
padding-box
使用 padding box 作为引用框.
content-box
使用 content box 作为引用框 none:这里没有创建的剪切路径。

例子

下面我们来实现本文标题所说的使用clip-path实现任意元素的碎片飞入动画效果的案例实现。

首先是编写HTML代码:

<strong>1. 普通带文本的元素</strong>
<div class="box active">
    <p id="text" class="text clip">魔兽要上映了...</p>
</div>
<strong>2. 替换元素如图片</strong>
<div class="box active">
    <img id="image" class="image clip" src="http://www.xttblog.http://www.bdx-leb.com/d753/cf3ad148301d.htmlcom/image/xxxx.jpg">
</div>

接着是CSS3代码:

.cliphttp://www.bdx-leb.com/e338/319701611dec.html[style] {
    opacity: 0;
}
.active .clip:not([style]) {
    opacity: 0;
    animation: fadeIn .1s .4s both;
}
.active http://www.bdx-leb.com/ecb1/84f20c625c39.html.clip[style] {
    will-change: transform;
    animation: noTransfohttp://www.bdx-leb.com/9dd3/5aa80dd2539a.htmlrm .5s both;
}
@keyframes noTransform {
    to {
        opacity: 1;
        transform: translate3d(0, 0, 0) rotatehttp://www.bdx-leb.com/da79/86d74bf35401.html(0);
    }
}
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
.box { height:http://www.bdx-leb.com/63c7/637d9a8c895f.html 190px; }
.text { position: absolute; width: 300px; }
.image { positionhttp://www.bdx-leb.com/be0e/6636b4ead6cf.html: absolute; }

最后是JavaScript 代码:

var eleText = document.getElementById('text'),
	eleImage = document.getElementById('image');
// 父级元素
var eleParentText = eleText.parentNode,
	eleParentImage = eleImage.parentNode;
var eleBtnText = document.getElementById('playText'),
	eleBtnImage = document.getElementById('playImage');
var isSupport = 
// 碎片特效初始化
clipPath(eleText);
clipPath(eleImage);
// 点击播放
if (isSupport) {
	eleBtnText.onclick = function() {
		eleParentText.classList.remove('active');	
		eleParentText.offsetHeight;
		eleParentText.classList.add('active');
	};	
	eleBtnImage.onclick = function() {
		eleParentImage.classList.remove('active');	
		eleParentImage.offsetHeight;
		eleParentImage.classList.add('active');
	};	
}

文中用到的clipPath方法已被已被我共享到了github,下载地址是:https://github.com/xmt1139057136/clipPath-min.js。

参考资料

clip-path <clipPath>

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!


——— 全文完 ———
Powered by 张鑫旭 | 鄂ICP备14009759号-2 | 网站留言 Copyright © 2014-2016 张鑫旭 版权所有