JavaScript实现Flash炫光波动特效


Posted in Javascript onMay 14, 2015

看到flash的实现这类的动画非常的便捷,于是试图胡搞一下。全部是用dom模拟的像素点,锯齿是难免的……

这个要避免锯齿恐怕要再加一次滤镜了吧,或者用图片。

<!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>
<title>炫光波动效果</title>
<script>
var lightWave = function(T,left,thick,sharp,speed,vibration,amplitude,opacity){
this.cont = T;//炫光容器
this.left = left;//炫光向右偏移量
this.thick = thick;//粗细
this.sharp = sharp;//尖锐度
this.speed = speed;//波动速度
this.vibration = vibration;//单位时间内的振动频率
this.amplitude = amplitude;//振幅
this.opacity = opacity;//透明度
this.cont.style.position = 'relative';
this.move();
}
lightWave.prototype = {
point:function(n,l,t,c,color){
var p = document.createElement('p');
p.innerHTML = ' ';
p.style.top = t + 'px';
p.style.left = l + 'px';
p.style.width = 1 + 'px';
p.style.height = n + 'px';
p.style.filter = 'alpha(opacity='+this.opacity+')';
p.style.lineHeight = 0;
p.style.position = 'absolute';
p.style.background = color;
c.appendChild(p);
return this;
},
color:function(){
var c = ['0','3','6','9','c','f'];
var t = [c[Math.floor(Math.random()*100)%6],'0','f'];
t.sort(function(){return Math.random()>0.5?-1:1;});
return '#'+t.join('');
},
wave:function(){
var l = this.left,t = this.wavelength,color = this.color();
var c = document.createElement('div');
c.style.top = this.amplitude+20+'px';
c.style.position = 'absolute';
c.style.opacity = this.opacity/100;
for(var i=1;i<this.thick;i++){
for(var j=0;j<this.thick*this.sharp-i*i;j++,l++){
this.point(i,l,-9999,c,color);
}
}
for(var i=this.thick;i>0;i--){
for(var j=this.thick*this.sharp-i*i;j>0;j--,l++){
this.point(i,l,-9999,c,color);
}
}
this.cont.appendChild(c);
return c;
},
move:function(){
var wl = this.amplitude;
var vibration = this.vibration;
var w = this.wave().getElementsByTagName('p');
for(var i=0;i<w.length;i++){
w[i].i = i;
}
var m = function(){
for(var i=0,len=w.length;i<len;i++){
if(w[i].ori == true){
w[i].i-=vibration;
var top = w[i].i%180==90?0:wl*Math.cos(w[i].i*Math.PI/180);
w[i].style.top = top+'px';
if(parseFloat(w[i].style.top)<=-wl){
w[i].ori = false;
}
}else{
w[i].i+=vibration;
var top = w[i].i%180==90?0:wl*Math.cos(w[i].i*Math.PI/180);
w[i].style.top = top+'px';
if(parseFloat(w[i].style.top)>=wl){
w[i].ori = true;
}
}
}
}
setInterval(m,this.speed);
}
}
window.onload = function(){
var targetDom = document.body;
new lightWave(targetDom,0,3,36,120,6,20,40);
new lightWave(targetDom,50,2,70,120,10,30,30);
}
</script>
</head>
<body style="background:#000;margin-top:100px">
</body>
</html>

参数:

var lightWave = function (T,left,thick,sharp,speed,vibration,amplitude,opacity){
    this .cont = T; //需要添加炫光的容器
    this .left = left; //炫光出生时的向右偏移量
    this .thick = thick; //粗细程度
    this .sharp = sharp; //尖锐程度
    this .speed = speed; //波动速度
    this.vibration = vibration; //单位时间内的振动频率
    this .amplitude = amplitude; //振幅
    this .opacity = opacity; //透明度
    this .cont.style.position = 'relative';
    this .move();
}

大家感兴趣可以来讨论一下。

另外,还遇到个问题,上面代码中ie下面的透明度滤镜不起作用,经研究得知,改变父容器的定位会影响子节点的透明滤镜的继承。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
准确获得页面、窗口高度及宽度的JS
Nov 26 Javascript
让AJAX不依赖后端接口实现方案
Dec 03 Javascript
javascript实现图像循环明暗变化的方法
Feb 25 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
Aug 24 Javascript
详解AngularJS中module模块的导入导出
Dec 10 Javascript
Bootstrap和Java分页实例第二篇
Dec 23 Javascript
详解vue父子组件间传值(props)
Jun 29 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
Jul 31 Javascript
javascript Function函数理解与实战
Dec 01 Javascript
JS+canvas画一个圆锥实例代码
Dec 13 Javascript
10个经典的网页鼠标特效代码
Jan 09 Javascript
vue组件实践之可搜索下拉框功能
Nov 25 Javascript
javascript基于DOM实现省市级联下拉框的方法
May 14 #Javascript
javascript搜索框效果实现方法
May 14 #Javascript
javascript操作ul中li的方法
May 14 #Javascript
javascript中createElement的两种创建方式
May 14 #Javascript
javascript常用方法总结
May 14 #Javascript
javascript实现动态改变层大小的方法
May 14 #Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
May 14 #Javascript
You might like
第六节--访问属性和方法
2006/11/16 PHP
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
详解Python的Django框架中的templates设置
2015/05/11 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
对Python函数设计规范详解
2019/07/19 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
python多进程使用函数封装实例
2020/05/02 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
信息专业个人的自我评价
2013/12/27 职场文书
大一自我鉴定范文
2013/12/27 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
小学生成长感言
2014/01/30 职场文书
亲属关系公证书
2014/04/08 职场文书
书香家庭事迹材料
2014/05/09 职场文书
二年级学生期末评语
2014/12/26 职场文书
驳回起诉民事裁定书
2015/05/19 职场文书
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫