导航

萌即是正义!时不时分享一些ACG活动记录与有趣代码的小站!

侧边栏
热门文章
1推文
2025年4月19日,天气晴,今天去六本木参观手塚治虫《火之鸟》展。 展览设在六本木著名的观景台里,一边看展览,一边还能从52层俯瞰整个东京的景色,所以特地选了傍晚时分,正好能看着东京由白天渐渐过渡到夜晚的模样,夜景非常漂亮。 不过稍微有点可惜,展览本身禁止拍摄,只能在入口处拍几张留念。 展出的内容以手塚治虫老师《火之鸟》的手稿为主,按照各个篇章的顺序,介绍了每个篇章的大致剧情和设定背景。 不愧是手塚治虫老师的神作,从这些设定与故事脉络里,能清晰看到如今许多动漫与影视作品的影子,堪称现代剧情内容创作的开山鼻祖。 如果有机会,真的很推荐亲自看看,感受一下那个时代孕育出的不朽之作。
热度
336
2页面
程序员老黄历&求签
热度
260
3页面
活动
热度
247
4推文
日本著名的博客平台goo blog宣布2025年11月18日停止服务。 很可惜呀,这个博客平台存有大量日本圣地巡礼的内容。随着goo blog的停止,圣地巡礼尤其是老作品的圣地巡礼的资料将会迎来断崖式的减少。
热度
182
5博文
面码找到你了!探寻超平和Busters的秘密基地——《我们仍未知道那天所看见的花的名字》秩父圣地巡礼
热度
182
6博文
探访《蜡笔小新》老家——春日部游记
热度
182
7页面
友链
热度
117
8博文
真相永远只有一个!《名侦探柯南》特别音乐会2025
热度
104
9推文
今天去看了首部初音未来的电影《剧场版 世界计划 破碎的世界与无法歌唱的未来》。 说是初音未来的电影,但其实是手游《世界计划》的剧场版。好像有挺多人看到是初音未来的电影就去看了,结果发现并不全是😅。其实在宣传海报中,初音未来后面的那些人才是主角。 不过,我也是那些没玩过手游的观众之一。其实整场看下来问题也不是很大,就是对于人物关系和世界观的设定可能会有些问题。电影其实也很贴心地在剧情开头,大致以剧情的形式展示了手游中的五个团体的人物及其性格,但感觉还是有些杯水车薪,约等于看个眼熟。 此次的电影是第一次购买应援场。所谓的应援场,就是能在电影院里像是听演唱会一样挥舞荧光棒和尽情呐喊。看着前排那些粉丝看到自己喜欢角色时的呐喊,以及演唱会环节的打CALL,应援场确实是很有意思的一种电影观看方式呢! 剧情方面,属于看了开头大概能猜到整部动画的剧情走向。不过,通过演唱会的气氛渲染,甚至还感受到了一丝丝的感动。 总体来说,对于手游的粉丝来说可能是嘉年华般的狂喜,对于没接触过手游的路人来说也能一定程度融入其中,属于一部不错的粉丝向电影(不管是手游粉丝还是初音未来粉丝)。 首周电影特典是CD和游戏内的兑换码。送CD这种形式还第一次遇到,官方大气!
热度
91
10推文
看完《孤独摇滚》的总集篇剧场版后篇了。 虽然删减在所难免,但是个人觉得制作组还是在尽量在保留精华。 ED歌曲《Re:Re:》把我惊艳到了,非常熟悉的旋律当时硬是想不起来,回到家查了一下原来第一次听到是在《只有我不在的街道》。 https://www.bilibili.com/video/BV1M5ejeMErR
热度
91
最新评论
广树管理员
2025-04-19 21:48
@粽叶加米:是这样的,现在主线推进非常非常慢
广树管理员
2025-04-19 21:47
@AlexMa233:Wayback Machine 查询前需要知道URL,届时都不知道怎么搜索
粽叶加米
2025-04-19 17:04
当时回想起为什么断追,可能是主线推进太慢~
AlexMa233
2025-04-19 15:11
有数据迁移服务,但是只能迁移评论和博文,并且要本人转移 没有完整的归档公开 但是Wayback Machine应该可以保存大部分的内容
广树管理员
2025-04-18 21:49
@Zrzzz:其实更直观点还可以传全景视频,只不过不想露脸。
攻略中
星空列车与白的旅行
暂无评分
Steam星空列车与白的旅行
2025年2月22日 22时 ~ 攻略中
已累计游玩1个月26天
乘坐的列车,划破夜空,飞驰在星空之下,令人心旷神怡——这可真是场超值之旅。舒爽夜风吹拂下的随心独旅中,我邂逅了随性的乘客,可人怜爱的乘务员。以及……猫耳少女?这场旅行,究竟会在她身上,留下了些什么呢?
界之轨迹
暂无评分
PS5界之轨迹
2024年9月28日 14时 ~ 攻略中
已累计游玩6个月23天
导力之父爱普斯泰因预言的世界末日即将到来,此时东大陆共和国所研发的导力火箭划破天空,即将探访这个世界的边界。 与此同时万事屋的青年们,正聚集在奥雷德自治州,与集结而来的各方势力,一同看望着这科技奇点。 人们这次是否能认识到世界的真实呢?
PSN奖杯卡

PSN奖杯卡

归档
赞助商广告

即使浏览器窗口在非激活状态(或者最小化)也让setTimeout、setInterval有效不休眠——Web Workers​

作者:广树时间:2018-01-16 15:28:41分类:JavaScript

因为浏览器的优化原因,setTimeout()和setInterval(),在浏览器窗口非激活的状态下会停止工作或者以极慢的速度工作。目前我已知就IE不会有这种问题。

这样的优化就会带来一个问题,比如我以前的一段代码【JavaScript】模拟随机号码中奖,因为需要不断随机出号码,所以会用到setInterval(),但是一旦切换窗口的话,就会停止随机算出号码,需要再次激活窗口才会重新运行。

这个时候为了让浏览器窗口在非激活状态(或者最小化)也让setTimeout、setInterval有效不休眠的话就要用到H5的新特性:Web Workers

Web Workers 是 HTML5 提供的一个javascript多线程解决方案,可以将一些大计算量的代码交由web Worker运行而不冻结用户界面。

注意:Web Workers需要IE10及其以上的浏览器支持。

根据特性,我们可以将随机算号搬到另外个线程去计算,主线程只用不断接收数据就好了。

于是我就改了模拟随机号码的代码:

主线程JS:

var worker =new Worker("fibonacci.js"); //创建一个Worker对象并向它传递将在新线程中执行的脚本的URL
function creat_nums(caipiao_span,arr){
	var caipiao_span = document.getElementsByClassName(caipiao_span);
	for(var i = 0 ; i < caipiao_span.length; i++){
		var arr_nums = arr[i];
		if(arr_nums<10){
			arr_nums = '0'+String(arr[i]);
		}else{
			arr_nums = String(arr[i])
		}
		caipiao_span[i].innerText = arr_nums;
	}
}
 function creat_attack(){
	 var input_q = document.getElementById("input_q").value.split(",");
	 var input_h = document.getElementById("input_h").value.split(",");
	 var arr = [input_q,input_h];
	 worker.postMessage(arr);     //向worker发送数据
	 worker.onmessage =function(evt){     //接收worker传过来的数据函数
	   //console.log(evt.data);         //输出worker发送来的数据
	   var dataArr = evt.data;
	   creat_nums("caipiao35",evt.data[7]);
	   creat_nums("caipiao12",evt.data[8]);
	   document.getElementById("cishu").innerText=String(evt.data[0]);
	   document.getElementById("cishu1").innerText=String(evt.data[1]);
	   document.getElementById("cishu2").innerText=String(evt.data[2]);
	   document.getElementById("cishu3").innerText=String(evt.data[3]);
	   document.getElementById("cishu4").innerText=String(evt.data[4]);
	   document.getElementById("cishu5").innerText=String(evt.data[5]);
	   document.getElementById("cishu6").innerText=String(evt.data[6]);
	   if(evt.data[9].length===5){
		   creat_nums("caipiao35-2",evt.data[9]);
		   creat_nums("caipiao12-2",evt.data[10]);
	   }
	 }
 }


副线程JS:

// fibonacci.js
onmessage =function (evt){
  	var cishu = 0;
	var six = 0;
	var five = 0;
	var four = 0;
	var three = 0;
	var two = 0;
	var one = 0;
	var cp_q = new Array();
	var cp_h = new Array();
	var cp2_q = new Array();
	var cp2_h = new Array();
	var attack_arr = new Array();
	var timer = null;
	var arr = evt.data;
	function generate_randomx(count,nums_length) {
	  //初始化数组
	  var generated = new Array();
	  //生成数组数
	  var generatedCount = generated.length;
	  //生成nums_length个随机数
	  for(var i = 0 ; i < nums_length; i++){
		var candidate = Math.floor(Math.random() * count)+1;
		//如果生成一样的数字则重新生成
		for(var j = 0; j < generatedCount; j++) {
		  if(candidate == generated[j]){
			candidate = Math.floor(Math.random() * count)+1;
			j= -1;
		  }
		}
		generated[i] = candidate;  
		generatedCount++;
	  }
	  return generated;  
	}
	function sortNumber(a, b){
		return a - b
	}
	function creat_nums(caipiao_span,arr){
		if(caipiao_span=="caipiao35"){
			cp_q = arr;
		}
		if(caipiao_span=="caipiao12"){
			cp_h = arr;
		}
		if(caipiao_span=="caipiao35-2"){
			cp2_q = arr;
		}
		if(caipiao_span=="caipiao12-2"){
			cp2_h = arr;
		}
	}
	function creat_attack(){
		clearTimeout(timer);
		var input_q = arr[0];
		var input_h = arr[1];
		if(input_q.length<5||input_h.length<2||input_q.length>5||input_h.length>2){
			console.log("输入格式不对");
			return false;
		}
		for(var i = 0 ; i < input_q.length; i++){
			var nums_cache = parseInt(input_q[i]);
			if(nums_cache<1||nums_cache>35){
				console.log("前区范围不正确");
				return false;
				break;
			}
			attack_arr[i] = nums_cache;
		}
		for(var i = 0 ; i < input_h.length; i++){
			var nums_cache = parseInt(input_h[i]);
			if(nums_cache<1||nums_cache>12){
				console.log("后区范围不正确");
				return false;
				break;
			}
			attack_arr[i+5] = nums_cache;
		}
		cp_nums();
	}
	function cp_nums(){
		var q = generate_randomx(35,5).sort(sortNumber);
		var h = generate_randomx(12,2).sort(sortNumber);
		var z  = new Array();
		z = q.concat();
		z.push(h[0]);
		z.push(h[1]);
		timer = setTimeout(function(){
			cp_bidui(attack_arr,z,q,h);
			var arrPost = [cishu,one,two,three,four,five,six,cp_q,cp_h,cp2_q,cp2_h];
			postMessage(arrPost);
		},10);
	}
	function cp_bidui(attack,z,q,h){
		var j = 0;
		var jq = 0;
		var jh = 0;
		creat_nums("caipiao35",q);
		creat_nums("caipiao12",h);	
		for(var i=0;i<attack.length;i++){
			if(i<=4){
				for(var r=0;r<z.length-2;r++){
					if(z[r]===attack[i]){
						jq++;
					}
				}
			}
			if(i<=6&&i>4){
				for(var u=5;u<z.length;u++){
					if(z[u]===attack[i]){
						jh++;
					}
				}
			}
			if(i===6){
				if(jq===5&&jh===2){
					console.log(q);
					console.log(h);
					one++;
					q = generate_randomx(35,5).sort(sortNumber);
					h = generate_randomx(12,2).sort(sortNumber);
					creat_nums("caipiao35-2",q);
					creat_nums("caipiao12-2",h);
					return;
				}
				else if(jq===5&&jh===1){
					two++;
					cp_nums();
				}
				else if(jq===4&&jh===2||jq===5){
					three++;
					cp_nums();
				}
				else if(jq===3&&jh===2||jq===4&&jh===1){
					four++;
					cp_nums();
				}
				else if(jq===2&&jh===2||jq===3&&jh===1||jq===4){
					five++;
					cp_nums();
				}
				else if(jh===2||jq===1&&jh===1||jq===3){
					six++;
					cp_nums();
				}else{
					cp_nums();
				}
			}
		}
		cishu++;
	}
	creat_attack();
}

HTML:

<div class="item_box">
	<h2>类型1(35选中5个+12选中2个)</h2>
	<p><span>模拟中奖号码:</span><input type="text" placeholder="输入5个1-35的数字,用英文逗号隔开" class="c_input" id="input_q">+<input type="text" placeholder="输入2个1-12的数字,用英文逗号隔开" class="c_input" id="input_h"></p>
    <p class="caipiao_p"><span>当前</span><span class="caipiao35">*</span><span class="caipiao35">*</span><span class="caipiao35">*</span><span class="caipiao35">*</span><span class="caipiao35">*</span><span>+</span><span class="caipiao12">*</span><span class="caipiao12">*</span></p>
    <p class="caipiao_p"><span>下一组</span><span class="caipiao35-2">*</span><span class="caipiao35-2">*</span><span class="caipiao35-2">*</span><span class="caipiao35-2">*</span><span class="caipiao35-2">*</span><span>+</span><span class="caipiao12-2">*</span><span class="caipiao12-2">*</span></p>
    <p><span>运行次数</span><span id="cishu"></span></p>
    <p><span>六等奖次数</span><span id="cishu6"></span></p>
    <p><span>五等奖次数</span><span id="cishu5"></span></p>
    <p><span>四等奖次数</span><span id="cishu4"></span></p>
    <p><span>三等奖次数</span><span id="cishu3"></span></p>
    <p><span>二等奖次数</span><span id="cishu2"></span></p>
    <p><span>一等奖次数</span><span id="cishu1"></span></p>
    <button type="button" onClick="creat_attack()">开始</button>
</div>

CSS:

.caipiao_p span{
	padding-right:5px;
}
.item_box{
	border-bottom:1px solid #ADADAD;
	padding-bottom:10px;
}
.c_input{
	width:210px;
	font-size:12px;
}


点击DEMO预览

donate.png

1210 x 50(蓝底).png

cloudcone