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 相关文章推荐
使用jQuery模板来展现json数据的代码
Oct 22 Javascript
各种页面定时跳转(倒计时跳转)代码总结
Oct 24 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
Mar 03 Javascript
jquery如何扑捉回车键触发的事件
Apr 24 Javascript
jQuery实现购物车多物品数量的加减+总价计算
Jun 06 Javascript
js简单的点击返回顶部效果实现方法
Apr 10 Javascript
javascript删除数组重复元素的方法汇总
Jun 24 Javascript
详解Javascript事件驱动编程
Jan 03 Javascript
Sea.JS知识总结
May 05 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
Aug 14 Javascript
利用javascript如何随机生成一定位数的密码
Sep 22 Javascript
Vue中render方法的使用详解
Jan 26 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
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
javascript History对象原理解析
2020/02/17 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
Python base64编码解码实例
2015/06/21 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
python抽取指定url页面的title方法
2018/05/11 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
html特殊符号示例 html特殊字符编码对照表
2014/01/14 HTML / CSS
美德好少年事迹材料
2014/01/19 职场文书
企业安全生产承诺书
2014/05/22 职场文书
体育专业求职信
2014/07/16 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
爱心捐助活动总结
2015/05/09 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL