js 雪花

雪花

复制代码
 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>雪花</title>
<style>
*{
margin:0;
padding:0;
vertical-align:top;
}
.xue{
position:absolute;
color:#fff;

}
.big{
position: relative;
margin: 0 auto;
width: 800px;
top:10px;
}
#bbb{
position:absolute;
top:0px;
left:400px;
width:400px;
border:1px #A9A9A9 solid;
background:#fff;
z-index:9;
height:30px;
line-height: 30px;
}

#xh{
position:absolute;
top:0px;
left:0px;
border:1px #A9A9A9 solid;
background:#fff;
width:400px;
height:30px;
line-height: 30px;
z-index:5;
margin: 0 auto;
}

#box{
height:600px;
position:relative;
border:1px #ccc solid;
background:#000;
overflow:hidden;
top:50px;
margin: 0 auto;
}
#fx{
margin:5px 0 0 5px;
}
#wibutton{
height: 20px;
margin-top: 5px;
margin-left: 60px;
background: darkgray;
border: none;
font-size: 14px;
border-radius: 5px;;
}
</style>
<script>
var i=0,sd;//i作为id属性值的一部分,sd作为定时器函数的标识
var all=0;//all用来存储所有的雪花数目
var other=0;//other用来存储已经落地的雪花数目
var wind=0;//wind用来存储风级


function getStyle(obj,attr){
var ie = !+"\v1";
if(attr=="backgroundPosition"){
if(ie){
return obj.currentStyle.backgroundPositionX +" "+obj.currentStyle.backgroundPositionY;
}
}
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return document.defaultView.getComputedStyle(obj,null)[attr];
}
}

//创建雪花
function done(){
//创建一个div元素,这个用来放置"雪花"点(.)
var a=document.createElement("div");
a.innerHTML="❄";//雪花
a.id="xue"+i;
a.className="xue";//引用做的属性
//设置元素的top值,随机设置
a.style.top=parseInt(getStyle(box,"height"))*(Math.random()>0.3?Math.random():0)+'px';
var ss=Math.random();//生成随机数
//设置元素的left属性值,随机设置
a.style.left = parseInt(getStyle(box,"width")) * ss + 'px';
box.appendChild(a);
godown(a.id,a.id,8*Math.random());
i++;
all++;//存储所有的雪花数目
var x = 100 * Math.random()* Math.random();//这个值用作定时器函数的执行延迟时间
//递归的方式执行done()方法,也就不断创建雪花
setTimeout(done,x);

};
//使雪花落地消失
function removeElement(aa){
var paa = aa.parentNode;
if(paa){
paa.removeChild(aa);
};
};
//雪花的飘落功能
function godown(a,e,speed){
if(speed < 3){
speed = 3
}
var a1 =document.getElementById(a);
//设置元素的top属性值
a1.style.top = parseInt(getStyle(a1,"top")) + speed +'px';
//top值等于box元素的height值,那么就说明落地了
if(parseInt(getStyle(a1,"top")) < parseInt(getStyle(box,"height"))){
e = setTimeout("godown(\""+a+"\",\""+e+"\","+speed+")",20)
}
else{
clearTimeout(e);
removeElement(a1);
speed=null;
other++;
//落地后就停止定时器函数的执行,并且删除此雪花
//计算剩余的雪花,就是总雪花数减去落地的雪花
document.getElementById('bbb').innerHTML = "区域内还有"+(all-other)+"个雪花点."
};
};
//设置雪花的风级
function fj(wind){
var a = document.getElementById("box").getElementsByTagName('div');
//设置雪花的left属性值,并不断调整此值
for(var index = 0;index<a.length;index++){
a[index].style.left = parseInt(a[index].style.left) + wind +'px';
};
if(Math.abs(wind) > 0.1){
sd = setTimeout("fj("+wind+")",20)
}
else{
clearTimeout(sd);
wind = 0;
};
};

window.οnlοad=function(){
var box=document.getElementById("box");
var obt=document.getElementById("wibutton");
box.style.width='1200px';
obt.οnclick=function(){
clearTimeout(sd);
wind=0;
wind=parseInt(document.getElementById("fx").value);
fj(wind);
}
done();
}
</script>
</head>
<body>
<div class="big">
<div id="bbb"></div>
<div id="xh">
<input id="fx" value="6"/>级风
<input id="wibutton" type="button" value="查看效果" />
</div>
</div>
<div id="box"></div>
</body>
</html>

 
复制代码

转载于:https://www.cnblogs.com/li923/p/11550860.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是两种JavaScript实现雪花算法生成ID的方法: 1. 使用snowflake-id插件 ```javascript import SnowflakeId from "snowflake-id"; const id = new SnowflakeId(); const guid = num => { return id.generate(); }; ``` 2. 原生实现 ```javascript var Snowflake = /** @class */ (function() { function Snowflake(workerId, datacenterId, sequence) { this.workerId = workerId || 0; this.datacenterId = datacenterId || 0; this.sequence = sequence || 0; this.lastTimestamp = -1; } Snowflake.prototype.nextId = function() { var timestamp = this.timeGen(); if (timestamp < this.lastTimestamp) { throw new Error( "Snowflake clock moved backwards. Refusing to generate id for " + (this.lastTimestamp - timestamp) + " milliseconds" ); } if (this.lastTimestamp == timestamp) { this.sequence = (this.sequence + 1) & Snowflake.SEQUENCE_MASK; if (this.sequence == 0) { timestamp = this.tilNextMillis(this.lastTimestamp); } } else { this.sequence = 0; } this.lastTimestamp = timestamp; var id = ((timestamp - Snowflake.TWEPOCH) << Snowflake.TIMESTAMP_LEFT_SHIFT) | (this.datacenterId << Snowflake.DATA_CENTER_ID_SHIFT) | (this.workerId << Snowflake.WORKER_ID_SHIFT) | this.sequence; return id.toString(); }; Snowflake.prototype.tilNextMillis = function(lastTimestamp) { var timestamp = this.timeGen(); while (timestamp <= lastTimestamp) { timestamp = this.timeGen(); } return timestamp; }; Snowflake.prototype.timeGen = function() { return new Date().getTime(); }; Snowflake.TWEPOCH = 1288834974657; Snowflake.WORKER_ID_BITS = 5; Snowflake.DATA_CENTER_ID_BITS = 5; Snowflake.MAX_WORKER_ID = -1 ^ (-1 << Snowflake.WORKER_ID_BITS); Snowflake.MAX_DATA_CENTER_ID = -1 ^ (-1 << Snowflake.DATA_CENTER_ID_BITS); Snowflake.SEQUENCE_BITS = 12; Snowflake.WORKER_ID_SHIFT = Snowflake.SEQUENCE_BITS; Snowflake.DATA_CENTER_ID_SHIFT = Snowflake.SEQUENCE_BITS + Snowflake.WORKER_ID_BITS; Snowflake.TIMESTAMP_LEFT_SHIFT = Snowflake.SEQUENCE_BITS + Snowflake.WORKER_ID_BITS + Snowflake.DATA_CENTER_ID_BITS; Snowflake.SEQUENCE_MASK = -1 ^ (-1 << Snowflake.SEQUENCE_BITS); return Snowflake; })(); var snowflake = new Snowflake(1, 1, 1); var id = snowflake.nextId(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值