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插件开发方法(附完整实例及下载)
Apr 01 Javascript
jQuery 源码分析笔记(2) 变量列表
May 28 Javascript
Bootstrap网格系统详解
Apr 26 Javascript
require.js配合插件text.js实现最简单的单页应用程序
Jul 12 Javascript
适用于手机端的jQuery图片滑块动画
Dec 09 Javascript
Angular1.x复杂指令实例详解
Mar 01 Javascript
20行js代码实现的贪吃蛇小游戏
Jun 20 Javascript
Angular4实现动态添加删除表单输入框功能
Aug 11 Javascript
vuex中使用对象展开运算符的示例
Sep 25 Javascript
JS实现简单表格排序操作示例
Oct 07 Javascript
jQuery实现html双向绑定功能示例
Oct 09 jQuery
node app 打包工具pkg的具体使用
Jan 17 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 静态变量的初始化
2009/11/15 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
详解Python字符串切片
2019/05/20 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
Python更新所有已安装包的操作
2020/02/13 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
技校个人求职信范文
2014/01/25 职场文书
小学节能减排倡议书
2014/05/15 职场文书
品酒会策划方案
2014/05/26 职场文书
工地安全质量标语
2014/06/07 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
个人四风对照检查材料
2014/09/26 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
python关于集合的知识案例详解
2021/05/30 Python