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判断浏览器是否是IE的比较好的办法
May 08 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
Oct 16 Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
浅谈 javascript 事件处理
Jan 04 Javascript
png在IE6 下无法透明的解决方法汇总
May 21 Javascript
如何高效率去掉js数组中的重复项
Apr 12 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
Sep 08 Javascript
JavaScript 数据类型详解
Mar 13 Javascript
node.js博客项目开发手记
Mar 16 Javascript
bing Map 在vue项目中的使用详解
Apr 09 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
Jun 14 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
Oct 23 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连接SQLServer2005方法及代码
2013/12/26 PHP
php实现微信公众号无限群发
2015/10/11 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
广告显示判断
2006/08/31 Javascript
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
python读取word文档的方法
2015/05/09 Python
深入理解python对json的操作总结
2017/01/05 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
广州一家公司的.NET面试题
2016/06/11 面试题
美容院考勤制度
2014/01/30 职场文书
聚美优品励志广告词
2014/03/14 职场文书
班主任班级寄语大全
2014/04/04 职场文书
蛋糕店创业计划书
2014/05/06 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
廉洁自律个人总结
2015/02/14 职场文书
小学生暑假安全公约
2015/07/14 职场文书
跳高加油稿
2015/07/21 职场文书
教师素质教育心得体会
2016/01/19 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
辞职信怎么写?
2019/05/21 职场文书
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server