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改变img标签的src属性在IE下没反应的解决方法
Jul 23 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
Mar 28 Javascript
JQuery实现防止退格键返回的方法
Feb 12 Javascript
javascript中eval函数用法分析
Apr 25 Javascript
js验证上传图片的方法
May 12 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
Sep 01 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
May 25 Javascript
jquery.param()实现数组或对象的序列化方法
Oct 08 jQuery
原生JS实现的跳一跳小游戏完整实例
Jan 27 Javascript
js实现菜单跳转效果
Dec 11 Javascript
js实现验证码干扰(动态)
Feb 23 Javascript
vite2.0+vue3移动端项目实战详解
Mar 03 Vue.js
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/10/23 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
浅谈php安全性需要注意的几点事项
2014/07/17 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
毕业生物理教师求职信
2013/10/17 职场文书
建筑工程技术应届生求职信
2013/11/17 职场文书
自荐信的格式
2014/03/10 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers