JS烟花背景效果完结格局,path的任意成分的散装拼凑动效

基于clip-path的任意成分的零散拼凑动效

2016/06/08 · CSS ·
clip-path

原稿出处:
张鑫旭(@张鑫旭)   

腾讯微云灰色遮罩指点蒙版更好的CSS完结格局

2016/03/08 · CSS · 1
评论 ·
蒙版

初稿出处: 张鑫旭(@张鑫旭
)   

JS烟花背景效果达成格局

 那篇作品首要介绍了JS烟花背景效果落到实处格局,实例分析了javascript操作dom成分已毕烟花特效的技巧,需求的爱人可以参照下

 

 

本文实例讲述了JS烟花背景效果得以完结格局。分享给大家供我们参考。具体完毕格局如下:

 

代码如下:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“;
<html xmlns=”;
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″
/>
<title>又一个很酷的JS烟花背景特效</title>
<script type=”text/javascript”>
var fireworks = function(){
this.size = 20;
this.rise();
}
fireworks.prototype = {
color:function(){
var c = [‘0′,’3′,’6′,’9′,’c’,’f’];
var t = [c[Math.floor(Math.random()*100)%6]JS烟花背景效果完结格局,path的任意成分的散装拼凑动效。,’0′,’f’];
t.sort(function(){return Math.random()>0.5?-1:1;});
return ‘#’+t.join(”);
},
aheight:function(){
var h = document.documentElement.clientHeight-250;
return Math.abs(Math.floor(Math.random()*h-200))+201;
},
firecracker:function(){
var b = document.createElement(‘div’);
var w = document.documentElement.clientWidth;
b.style.position = ‘absolute’;
b.style.color = this.color();
b.style.bottom = 0;
b.style.left = Math.floor(Math.random()*w)+1+’px’;
document.body.appendChild(b);
return b;
},
rise:function(){
var o = this.firecracker();
var n = this.aheight();
var c = this.color;
var e = this.expl;
var s = this.size;
var k = n;
var m = function(){
o.style.bottom = parseFloat(o.style.bottom)+k*0.1+’px’;
k-=k*0.1;
if(k<2){
clearInterval(clear);
e(o,n,s,c);
}
}
o.innerHTML = ‘.’;
if(parseInt(o.style.bottom)<n){
var clear = setInterval(m,20);
}
},
expl:function(o,n,s,c){
var R=n/3,Ri=n/6,Rii=n/9;
var r=0,ri=0,rii=0;
for(var i=0;i<s;i++){
var span = document.createElement(‘span’);
var p = document.createElement(‘i’);
var a = document.createElement(‘a’);
span.style.position = ‘absolute’;
span.style.fontSize = n/10+’px’;
span.style.left = 0;
span.style.top = 0;
span.innerHTML = ‘*’;
p.style.position = ‘absolute’;
p.style.left = 0;
p.style.top = 0;
p.innerHTML = ‘*’;
a.style.position = ‘absolute’;
a.style.left = 0;
a.style.top = 0;
a.innerHTML = ‘*’;
o.appendChild(span);
o.appendChild(p);
o.appendChild(a);
}
function spr(){
r += R*0.1;
ri+= Ri*0.06;
rii+= Rii*0.06;
sp = o.getElementsByTagName(‘span’);
p = o.getElementsByTagName(‘i’);
a = o.getElementsByTagName(‘a’);
for(var i=0; i<sp.length;i++){
sp[i].style.color = c();
p[i].style.color = c();
a[i].style.color = c();
sp[i].style.left=r*Math.cos(360/s*i)+’px’;
sp[i].style.top=r*Math.sin(360/s*i)+’px’;
sp[i].style.fontSize=parseFloat(sp[i].style.fontSize)*0.96+’px’;
p[i].style.left=ri*Math.cos(360/s*i)+’px’;
p[i].style.top=ri*Math.sin(360/s*i)+’px’;
p[i].style.fontSize=parseFloat(sp[i].style.fontSize)*0.96+’px’;
a[i].style.left=rii*Math.cos(360/s*i)+’px’;
a[i].style.top=rii*Math.sin(360/s*i)+’px’;
a[i].style.fontSize=parseFloat(sp[i].style.fontSize)*0.96+’px’;
}
R-=R*0.1;
if(R<2){
o.innerHTML = ”;
o.parentNode.removeChild(o);
clearInterval(clearI);
}
}
var clearI = setInterval(spr,20);
}
}
window.onload = function(){
function happyNewYear(){
new fireworks();
}
setInterval(happyNewYear,1000);
}
</script>
<style type=”text/css”>
</style>
</head>
<body style=”background:#000;font:12px Georgia, ‘Times New Roman’,
Times, serif”>
</body>
</html>

 

运转效果如下所示:

澳门葡京 1

期望本文所述对大家的javascript程序设计具有协理。

那篇作品紧要介绍了JS烟花背景效果落实方式,实例分析了javascript操作dom成分完成烟花特效的技巧,必要的爱人可以…

以前用Clip属性完成了文字上下两半例外色彩的拼接。
五彩缤纷渐变字,包容所有主流浏览器。
页面JS当中真正有效的唯有colorful()函数:

一、先看效果

您可以狠狠地方击那里:基于clip-path的成分碎片飞入动效demo

澳门葡京 2

一、微云的落到实处

网站有一些变更的时候,为了让用户熟悉新的操作地点,往往会增多一个辅导,常见的艺术就是运用一个青色的半透明蒙版,然后须要关爱的区域是雕刻的。

接下来前七日五我去微云旋转的时候,也见到了率领层,于是职业病又犯了,去学习下别人是怎么落到实处的。下边是观看的结果:

为了落实镂空蒙层效果,作者公布了时辰候拼积木的才能,使用两层HTML结构,内层使用5块独立区域拼接形成,至于中档镂空的区域的阴影则是行使的图形已毕的。

澳门葡京 3

澳门葡京 4

就算最终的作用满意了产品的要求,对于用户而言,目标已经达标。不过,从代码品质层面、潜在的感受升高大概性、使用境况广度上来讲,仍旧弱了无数的。

比方来说,借使我们某个提醒区域面积很大,那中间的可怜镂空区域尺寸是或不是要变,那背后的背景图片如何做?搞新图,有人看到了使用了background-size:cover,
那IE7,IE8如何是好?哦,可能微云不要求管IE7, IE8.

设若不需求管IE7,
IE8,那这里的达成就显得越来越小白了。我们实在只需求一层标签,一层空标签就可以完毕大家的功力,且不必要图片。

有关作品

连锁搜索:

明天看啥

查找技术库

回来首页

  • 摩托罗拉Xshot通话背景设置格局
  • CSS定义鼠标移上图片链接,出现边框效果,
  • android 拉伸图片,
  • 完毕Activity的滑行再次回到效果,activity滑动重回
  • 不错的动画效果-AndroidViewHover,
  • jquery落成简单手风琴菜单功效实例,jquery手风

连带频道:
HTML/CSS澳门葡京,  HTML5  Javascript  jQuery  AJax教程  前者代码  正则表明式  Flex教程  WEB前端教程  

复制代码 代码如下:

二、已毕原理

效用本质上是CSS3动画片,就是旋转(transform:rotate)和位移(transform:translate),只是旋转和位移的部件是三角碎片而已。

那三角从何而来,本质上是应用CSS3 clip-path剪裁出来的。

关于CSS3 clip-path可以瞻仰我此前的篇章:“CSS3 clip-path
polygon图形打造与动画变换二三事”。

剪裁一个三角并简单,可是,倘使把自由的因素剪裁成一个一个的三角呢?

那就要求依靠JS来完毕了。

JS把成分剪裁成一个一个的等腰直角三角形,然后轻易分布在周围,然后,通过CSS3
animation动画,让所有的在四周的要素归为就足以。因为CSS3
animation动画关键帧中的CSS样式权重就像要比style大。

于是,我们有如下大旨CSS:

.clip[style] { opacity: 0; } .active .clip[style] { will-change:
transform; animation: noTransform .5s both; } @keyframes noTransform {
to { opacity: 1; transform: translate3d(0, 0, 0) rotate(0); } }

1
2
3
4
5
6
7
8
9
10
11
12
13
.clip[style] {
    opacity: 0;
}
.active .clip[style] {
    will-change: transform;
    animation: noTransform .5s both;
}
@keyframes noTransform {
    to {
        opacity: 1;
        transform: translate3d(0, 0, 0) rotate(0);
    }
}

其中,will-change作用是让动画更通畅,可参见我前面作品:“应用CSS3
will-change升高页面滚动、动画等渲染品质”。

.active .clip[style]那段CSS表示的意思是,只要被剪裁的三角形们的父级有了类名active,
所有的三角形的岗位就不是即兴分布,而是会以动画情势归位到其原先的职位。没错,是富有,我们一向不需求对各个剪裁的三角形碎片做动画,只要归位就足以。

通过toggle类名active,
碎片的动效就可以不停地突显,经测试,在运动端效果也是没错的。

眼下,除了IE浏览器和Android4.3-都辅助了clip-path,但是还索要-webkit-个人前缀。

二、我的完成

重在在于思维方式的更动。拼积木那种想法大家都比较不难想到,符合一般认知,不过,但代码层面,大家得以举办思考转换,发散思考,偌大的半透明遮罩层,大家毫不老想着背景象块背景象块,可以突破常规思维,把它认为是边框,一个很大很大的边框(我们平时选拔border都是1像素巨多),那样,我们本来就有了镂空效果。

如下图示意:
澳门葡京 5

然则,如今大家中间的镂空区域方的,有没有哪些办法成为圆的呢?
自然有,方法1是因素设置超大圆角,然而,此时为了边框依旧填满整个显示器,border边框尺寸要大大增大,可是,为了不影响页面的滚动条,我们务必再嵌套一层标签,就显得啰嗦了;
方法2则是办法1或多或少地点的逆向思维处理,就是把当前因素作为外层限制标签,里面重新生成一个大尺寸伪成分,完结自适应尺寸的圆角职能,那些好,HTML干净不啰嗦,CSS一步到位(代码如下示意);

.cover::before { content: ”; width: 100%; height:100%; border-radius:
50%; border: 400px solid #000; position: absolute; left: -400px; top:
-400px; /* 自个儿瞎填的参数,示意 */ box-shadow: inset 0 0 5px 2px
rgba(0,0,0,.75); }

1
2
3
4
5
6
7
8
9
10
.cover::before {
    content: ”;
    width: 100%; height:100%;
    border-radius: 50%;
    border: 400px solid #000;
    position: absolute;
    left: -400px; top: -400px;
    /* 自己瞎填的参数,示意 */
    box-shadow: inset 0 0 5px 2px rgba(0,0,0,.75);
}

世家可以看到,上边的伪成分的相继参数都是稳定参数值,与外表因素的尺码什么的没有其余关系,只要外部因素尺寸不超越400,里面永远会有一个正椭圆的内阴影的镂空图形(因为超越部分会被.cover藏匿),要知道圆角和正椭圆的涉嫌,可以参见我事先的小说:“秋月哪一天了,CSS3
border-radius知多少?”。

眼见为实,耳听为虚,您可以狠狠地点击这里:一层标签完毕网站引导镂空蒙版功用demo
(点击黄色蒙层会有引导切换效果)

demo那几个镂空蒙层所采取的HTML代码如下:

<div class=”cover”/></div>

1
<div class="cover"/></div>

是的,就像是此不难,没什么嵌套,没有怎么多少个因素变形金刚合体,没有接纳图片。

微云那张图片3K多,以微云的用户访问量,估摸流量费要多多钱的。

同时,我们倘使点击蒙版,会发现,镂空的区域大小每一回都是不等同的,有大有小,有高有瘦,而微云的不行完结格局要满足此要求就左右为难;而且,我们发现没,那几个尺寸地点的变型都是卡通片来动画去的,不是嗙嗙嗙那种机械的功用,更soft,
对用户视觉率领效应更好,你看,我从此间到此地了,为何可以兑现动画效果啊,因为我们的鬼斧神工和内阴影都是CSS完成的,而微云的图样方法,显明是无力回天有动画的。

澳门葡京 6

JS代码辅助
理所当然,我的落成也离不开JS的扶持,JS的工作很简短,让蒙层的width/height以及border高低和须要指点的因素相关联。

本身专门整了个可以公用的法子coverGuide(命名不希罕本人随便改):

var coverGuide = function(cover, target) { var body = document.body, doc
= document.documentElement; if (cover & target) { // target
size(width/height) var targetWidth = target.clientWidth, targetHeight =
target.clientHeight; // page size var pageHeight = doc.scrollHeight,
pageWidth = doc.scrollWidth; // offset of target var offsetTop =
target.getBoundingClientRect().top + (body.scrollTop || doc.scrollTop),
offsetLeft = target.getBoundingClientRect().left + (body.scrollLeft ||
doc.scrollLeft); // set size and border-width cover.style.width =
targetWidth + ‘px’; cover.style.height = targetHeight + ‘px’;
cover.style.borderWidth = offsetTop + ‘px ‘ + (pageWidth – targetWidth –
offsetLeft) + ‘px ‘ + (pageHeight – targetHeight – offsetTop) + ‘px ‘ +
offsetLeft + ‘px’; cover.style.display = ‘block’; // resize if
(!cover.isResizeBind) { if (window.addEventListener) {
window.addEventListener(‘resize’, function() { coverGuide(cover,
target); }); cover.isResizeBind = true; } else if (window.attachEvent) {
window.attachEvent(‘onresize’, function() { coverGuide(cover, target);
}); cover.isResizeBind = true; // IE7, IE8 box-shadow hack
cover.innerHTML = ”; } } } };

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
var coverGuide = function(cover, target) {
    var body = document.body, doc = document.documentElement;
    if (cover & target) {
        // target size(width/height)
        var targetWidth = target.clientWidth,
            targetHeight = target.clientHeight;
 
        // page size
        var pageHeight = doc.scrollHeight,
            pageWidth = doc.scrollWidth;
 
        // offset of target    
        var offsetTop = target.getBoundingClientRect().top + (body.scrollTop || doc.scrollTop),
            offsetLeft = target.getBoundingClientRect().left + (body.scrollLeft || doc.scrollLeft);
 
        // set size and border-width
        cover.style.width = targetWidth + ‘px’;
        cover.style.height = targetHeight + ‘px’;    
        cover.style.borderWidth =
            offsetTop + ‘px ‘ +
            (pageWidth – targetWidth – offsetLeft) + ‘px ‘ +
            (pageHeight – targetHeight – offsetTop) + ‘px ‘ +
            offsetLeft + ‘px’;
 
        cover.style.display = ‘block’;
 
        // resize
        if (!cover.isResizeBind) {
            if (window.addEventListener) {
                window.addEventListener(‘resize’, function() {
                    coverGuide(cover, target);
                });    
                cover.isResizeBind = true;
            } else if (window.attachEvent) {
                window.attachEvent(‘onresize’, function() {
                    coverGuide(cover, target);
                });
                cover.isResizeBind = true;
 
                // IE7, IE8 box-shadow hack
                cover.innerHTML = ”;
            }
        }
    }
};

这里的coverGuide方式运用原生JS落成,IE6+浏览器都是匹配的,不依赖JS库,我们可以随心所欲行使。当然,写得心急,没有严谨讲明,或然有bug,我们可以稍微留点心。

行使十分简单,语法如下:

coverGuide(cover, target);

1
coverGuide(cover, target);

其中cover就是.cover本条独立的蒙版成分,target则是大家需求教导的要素,按钮啊,导航什么的。然后,大家的雕饰区域自动定位到target的位置,大小也是target要素的大大小小。超省心。

实际应用,可参看上边的demo,源代码就在页面上。

IE7,IE8怎么办
假诺您须要包容IE7,IE8,大家不妨就方框效果;即使规划和成品接受不了,则足以应用图片打个补丁,例如地点JS代码部分的:

cover.innerHTML = ‘<img src=”guide-shadow.png”>’;

1
cover.innerHTML = ‘<img src="guide-shadow.png">’;

自己demo使用的那些图片长下边那样:
澳门葡京 7

大小还有阴影都是自身要好随手一搞的,目的在于示意,真实项目大家可以向设计师索要图片。

下一场,CSS超easy, 图片撑满大家的cover就可以。

/* IE7, IE8 img */ .cover > img { width: 100%; height: 100%; }

1
2
3
4
/* IE7, IE8 img */
.cover > img {
    width: 100%; height: 100%;    
}

帮客评论

function colorful(obj,font,r,g,b,type){
var boxObj;
if(typeof(obj)==”string”||typeof(obj)==”number”){
boxObj = document.getElementById(obj);
}else{
boxObj = obj;
}
boxObj.innerHTML=”<a href=’#’>”+font+”</a>”;
var num = boxObj.getElementsByTagName(“a”)[0].scrollWidth;
boxObj.innerHTML=””;
for(var i=0;i<=num;i++){
var j=i+1;
var c=Math.round(255/num*i);
switch(Number(type)){
case 0:r=c;g=c;b=c;break;
case 1:r=c;break;
case 2:g=c;break;
case 3:b=c;break;
}
var iObj = document.createElement(“A”);
iObj.innerHTML=font;
iObj.style.clip=”rect(auto “+j+”px auto “+i+”px)”;
iObj.style.color=”rgb(“+r+”,”+g+”,”+b+”)”;
iObj.href=”#”;
boxObj.appendChild(iObj);
}
}

三、我也想接纳

自个儿花了点武术封装了一个方法,1K转运一点,代码如下(大家可以一贯放到项目JS中或独立个JS文件):

/** * @description 任意成分碎片化,合营CSS可以有散装拼凑特效
越多内容参见 * @author
zhangxinxu(.com) * @license MIT [封存此段注释新闻署名] */ var
clipPath=function(t){if(!t){return false}t.removeAttribute(“id”);var
r={height:t.clientHeight,width:t.clientWidth,distance:60,html:t.outerHTML};if(window.getComputedStyle(document.body).webkitClipPath){var
a=r.distance,n=r.width,e=r.height;var o=””;for(var i=0;i’,'”
style=”‘+e+v+'”>’)})}}t.parentNode.innerHTML=r.html+o;return
true}else{t.className+=” no-clipath”;return false}};

1
2
3
4
5
6
7
/**
* @description 任意元素碎片化,配合CSS可以有碎片拼接特效
               更多内容参见 http://www.zhangxinxu.com/wordpress/?p=5426
* @author zhangxinxu(.com)
* @license MIT [保留此段注释信息署名]
*/
var clipPath=function(t){if(!t){return false}t.removeAttribute("id");var r={height:t.clientHeight,width:t.clientWidth,distance:60,html:t.outerHTML};if(window.getComputedStyle(document.body).webkitClipPath){var a=r.distance,n=r.width,e=r.height;var o="";for(var i=0;i’,’" style="’+e+v+’">’)})}}t.parentNode.innerHTML=r.html+o;return true}else{t.className+=" no-clipath";return false}};

语法如下:

clipPath(ele);

1
clipPath(ele);

其中,ele为DOM元素,clipPath情势基于原生JS书写,不重视其余JS框架,对于不襄助clip-path的浏览器没有效果。再次回到值是布尔值truefalse,
返回true表示浏览器帮忙clip-pathfalse为不协助。

代码中的distance:60代表碎片的轻重缓急,越小碎片越来越多,对质量的考验就越大。

譬如说,demo粤语字和图表的应用:

var eleText = document.getElementById(‘text’), eleImage =
document.getElementById(‘image’); // 碎片特效开头化 clipPath(eleText);
clipPath(eleImage);

1
2
3
4
5
6
var eleText = document.getElementById(‘text’),
    eleImage = document.getElementById(‘image’);
    
// 碎片特效初始化
clipPath(eleText);
clipPath(eleImage);

亟待小心的是:

  1. 使用动效的务必是absolute相对定位成分。一来效果必须,二来质量考量;
  2. 行使动效的因素不要太复杂,只怕对质量会有考验;
  3. 本来被用来粉碎的因素平素都在的,那样,碎片拼接处的空闲就看不出来啦!

三、结束语

这种蒙版覆盖思想吗,不仅仅适用于那种大规模的指导。大家上传图片,尤其上传头像之后,要对头像举行剪裁,常见的相互之一就是四周青色,中间镂空,也可以利用巨大border来兑现大家的成效,一层标签足矣,根本不要求上下左右额外4层标签拼接合体完成。

内部自适应的圆角效劳单看文字,很多同伙推断不明了我在说些什么,提议去demo页面看下伪成分的代码,真实区域大小和尾声效果,揣摸就会领会了。

感激阅读,欢迎交换,欢迎提供更好的落实格局,一定有的,只是自个儿功力不够。

以上~

澳门葡京 8

连带文章

  • 小tip:CSS3下的圈子遮罩效果完结与使用
    (0.604)
  • CSS3 box-shadow兼容loading效果兼IE10+ CSS
    Hack介绍
    (0.396)
  • CSS3
    box-shadow盒阴影图形生成技术
    (0.396)
  • CSS
    border三角、圆角图形生成技术简介
    (0.350)
  • CSS3图标图形生成技术个人攻略
    (0.338)
  • 遐想:即使没有IE6和IE7浏览器…
    (0.286)
  • 伪元素表单控件默认样式重置与自定义大全
    (0.286)
  • first-line伪类完成包容IE6/IE7的单标签多背景效果
    (0.286)
  • CSS计数器(种类数字字符自动递增)详解
    (0.286)
  • CSS之before,
    after伪成分天性表现两则
    (0.286)
  • CSS3/SVG
    clip-path路径剪裁遮罩属性简介
    (RANDOM – 0.255)

    1 赞 2 收藏 1
    评论

澳门葡京 9

CLIP落成色彩渐变字体

四、结束语

我写的率先版JS中的碎片分布是为随机分布,基本上依据自家方位随机分布在4个角的来头上;那里给大家体现的是真随机,也就是最左侧的零碎只怕是从最右面飞过来的,所以效果要更爆裂一点。

好了,其余就没怎么了,一个小特效而已。

实质上说穿了,并没有多大的难度,一点JS+一点CSS。关键是想到好的解决思路。怎么着才能有好的缓解思路呢,须求对前者是真爱,这样您会直接把前端放在脑中,放任自流就会是还是不是迸出很多很好的笔触,创意和平解决决方案了!否则,永远都只能谬种流传。

1 赞 2 收藏
评论

澳门葡京 10

CSS多彩渐变字

文字:

R值:

开端化RGB颜色中的R值

G值:

起初化RGB颜色中的G值

B值:

早先化RGB颜色中的B值

渐变方式:

灰度渐变变化R值变化G值变化B值 相应的数值会强制在0~255之间浮动

    

渐变着色

 

Designed by Silence,转载请申明出处
http://www.silentash.com/?id=109

[Ctrl+A 全选
注:如需引入外部Js需刷新才能执行]

虽说IE有谈得来的渐变滤镜,但别的浏览器都不支持。CLIP属性的选拔可以支撑具备浏览器!通进程序,大家可以轻松地给每一种文字副本添加CLIP属性将一段文字分割成一个一个像素,分别着色,最终结合到共同,已毕多彩渐变!

您或许感兴趣的稿子:

  • 纯js和css已毕渐变色包蕴静态渐变和动态渐变
  • js达成图片从左往右渐变切换效果的法门
  • js渐变突显渐变消失示例代码
  • js落成类似光照的炫彩文字渐变视觉冲击作用
  • 用js已毕层随着剧情大小动态渐变改变
    推荐
  • JS Tween 颜色渐变
  • 打包了一个自动生成渐变字的JS类(clip)
  • 运用递增的数字重回循环渐变的水彩的js代码
  • JS+CSS完结感应鼠标渐变呈现DIV层的办法

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website