◆少前百科是非盈利性、非官方的少女前线维基百科。 ◆如果您发现某些内容错误/空缺,请勇于修正/添加!参与进来其实很容易!点这里 加入少前百科。 ◆有任何意见、建议、纠错,欢迎在 GFwiki:反馈与建议 提出和讨论。编辑事务讨论QQ群:597764980,微博@GFwiki少前百科 ◆To foreigners,You can use twitter to contact us. |
“Widget:AVGplayer/js”的版本间的差异
(fix avgblack avgnavigationtitle) |
(add sound effect) |
||
第1行: | 第1行: | ||
<includeonly><script type="text/javascript">(window.RLQ=window.RLQ||[]).push(function(){ | <includeonly><script type="text/javascript">(window.RLQ=window.RLQ||[]).push(function(){ | ||
− | var dollarray, bgarray, bgmarray; | + | var dollarray, bgarray, bgmarray, searray; |
− | var | + | var xmlhttp_doll = new XMLHttpRequest(); |
− | + | xmlhttp_doll.onreadystatechange = function() { | |
if (this.readyState == 4 && this.status == 200) { | if (this.readyState == 4 && this.status == 200) { | ||
dollarray = JSON.parse(this.responseText.replace(/\/\*\s{1,4}\d{1,4}\s{1,4}\*\//g,"").replace(",\n}", "\n}"));} | dollarray = JSON.parse(this.responseText.replace(/\/\*\s{1,4}\d{1,4}\s{1,4}\*\//g,"").replace(",\n}", "\n}"));} | ||
}; | }; | ||
− | + | xmlhttp_doll.open("GET", "/index.php?title=JSON:AVGDOLL&action=raw", true); | |
− | + | xmlhttp_doll.send(); | |
− | var | + | var xmlhttp_bg = new XMLHttpRequest(); |
− | + | xmlhttp_bg.onreadystatechange = function() { | |
if (this.readyState == 4 && this.status == 200) { | if (this.readyState == 4 && this.status == 200) { | ||
bgarray = JSON.parse(this.responseText.replace(/\/\*\s{1,4}\d{1,4}\s{1,4}\*\//g,"").replace(",\n}", "\n}"));} | bgarray = JSON.parse(this.responseText.replace(/\/\*\s{1,4}\d{1,4}\s{1,4}\*\//g,"").replace(",\n}", "\n}"));} | ||
}; | }; | ||
− | + | xmlhttp_bg.open("GET", "/index.php?title=JSON:AVGBGCG&action=raw", true); | |
− | + | xmlhttp_bg.send(); | |
− | var | + | var xmlhttp_bgm = new XMLHttpRequest(); |
− | + | xmlhttp_bgm.onreadystatechange = function() { | |
if (this.readyState == 4 && this.status == 200) { | if (this.readyState == 4 && this.status == 200) { | ||
bgmarray = JSON.parse(this.responseText.replace(/\/\*\s{1,4}\d{1,4}\s{1,4}\*\//g,"").replace(",\n}", "\n}"));} | bgmarray = JSON.parse(this.responseText.replace(/\/\*\s{1,4}\d{1,4}\s{1,4}\*\//g,"").replace(",\n}", "\n}"));} | ||
}; | }; | ||
− | + | xmlhttp_bgm.open("GET", "/index.php?title=JSON:AVGBGM&action=raw", true); | |
− | + | xmlhttp_bgm.send(); | |
− | var | + | var xmlhttp_se = new XMLHttpRequest(); |
− | + | xmlhttp_se.onreadystatechange = function() { | |
− | } | + | if (this.readyState == 4 && this.status == 200) { |
+ | searray = JSON.parse(this.responseText.replace(/\/\*\s{1,4}\d{1,4}\s{1,4}\*\//g,"").replace(",\n}", "\n}"));} | ||
+ | }; | ||
+ | xmlhttp_se.open("GET", "/index.php?title=JSON:AVGSE&action=raw", true); | ||
+ | xmlhttp_se.send(); | ||
var effarray = { | var effarray = { | ||
第105行: | 第109行: | ||
$("#avgtitle").html($(this).children("span.avgname").html().replace(/<span class="subsign">/g, "").replace(/<\/span>/g, "")); | $("#avgtitle").html($(this).children("span.avgname").html().replace(/<span class="subsign">/g, "").replace(/<\/span>/g, "")); | ||
console.log($(this).children("span.avgname").html().replace(/<span class="subsign">/g, "").replace(/<\/span>/g, "") + " : " + $(this).attr("link")); | console.log($(this).children("span.avgname").html().replace(/<span class="subsign">/g, "").replace(/<\/span>/g, "") + " : " + $(this).attr("link")); | ||
− | $("#avgbgm").attr("src", ""); | + | $("#avgbgm").attr("src", ""); $(".avgsound").remove(); |
$("#avgbackground").html(""); | $("#avgbackground").html(""); | ||
$(".avgdollpic").remove(); | $(".avgdollpic").remove(); | ||
第145行: | 第149行: | ||
<div id="avgtonext" class="avgbutton avgpushbutton">下一章节<\/div> | <div id="avgtonext" class="avgbutton avgpushbutton">下一章节<\/div> | ||
<div id="avgchose" state="off" class="avgbutton">选择剧情<\/div> | <div id="avgchose" state="off" class="avgbutton">选择剧情<\/div> | ||
− | <div id="avgload">加载进度: PIC[0/0] CG[0/0] BGM[0/0] | + | <div id="avgload">加载进度: PIC[0/0] CG[0/0] BGM[0/0] SE[0/0] E[0/0]<\/div> |
<\/div> | <\/div> | ||
第199行: | 第203行: | ||
$(this).css({"background-color":"transparent","color":"#eaeaea"}); | $(this).css({"background-color":"transparent","color":"#eaeaea"}); | ||
$("#avgbgm")[0].muted = true; | $("#avgbgm")[0].muted = true; | ||
+ | for(let i in $(".avgsound")) $(".avgsound")[i].muted = true; | ||
} else if($(this).attr("state") == "off"){ | } else if($(this).attr("state") == "off"){ | ||
$(this).attr("state", "on"); | $(this).attr("state", "on"); | ||
$(this).css({"background-color":"#eaeaea","color":"black"}); | $(this).css({"background-color":"#eaeaea","color":"black"}); | ||
$("#avgbgm")[0].muted = false; | $("#avgbgm")[0].muted = false; | ||
+ | for(let i in $(".avgsound")) $(".avgsound")[i].muted = false; | ||
} | } | ||
}); | }); | ||
第209行: | 第215行: | ||
if(sound_num > 0) sound_num = sound_num - 1; | if(sound_num > 0) sound_num = sound_num - 1; | ||
let back_text = String(sound_num) + "0%"; | let back_text = String(sound_num) + "0%"; | ||
− | $("#avgbgm")[0].volume = sound_num / 10; | + | $("#avgbgm")[0].volume = sound_num / 20; |
+ | for(let i in $(".avgsound")) $(".avgsound")[i].volume = sound_num / 10; | ||
$("#avgsoundwidth").css("cssText","background-image: linear-gradient(90deg, #eaeaea " + back_text + ", transparent " + back_text + ");"); | $("#avgsoundwidth").css("cssText","background-image: linear-gradient(90deg, #eaeaea " + back_text + ", transparent " + back_text + ");"); | ||
$("#avgsoundwidth").attr("state",sound_num); | $("#avgsoundwidth").attr("state",sound_num); | ||
第217行: | 第224行: | ||
if(sound_num < 10) sound_num = sound_num + 1; | if(sound_num < 10) sound_num = sound_num + 1; | ||
let back_text = String(sound_num) + "0%"; | let back_text = String(sound_num) + "0%"; | ||
− | $("#avgbgm")[0].volume = sound_num / 10; | + | $("#avgbgm")[0].volume = sound_num / 20; |
+ | for(let i in $(".avgsound")) $(".avgsound")[i].volume = sound_num / 10; | ||
$("#avgsoundwidth").css("cssText","background-image: linear-gradient(90deg, #eaeaea " + back_text + ", transparent " + back_text + ");"); | $("#avgsoundwidth").css("cssText","background-image: linear-gradient(90deg, #eaeaea " + back_text + ", transparent " + back_text + ");"); | ||
$("#avgsoundwidth").attr("state",sound_num); | $("#avgsoundwidth").attr("state",sound_num); | ||
第367行: | 第375行: | ||
$("#avgbackground").fadeOut(1000 / autospeed); $("#avgword").fadeOut(1000 / autospeed); | $("#avgbackground").fadeOut(1000 / autospeed); $("#avgword").fadeOut(1000 / autospeed); | ||
setTimeout(function(){ | setTimeout(function(){ | ||
− | $(".avgefect").remove(); | + | $(".avgefect").remove(); $(".avgsound").remove(); |
$(".avgdollpic").remove(); $("#avgbackground").html(""); $("#avgbgm").attr("src", ""); | $(".avgdollpic").remove(); $("#avgbackground").html(""); $("#avgbgm").attr("src", ""); | ||
$("#avgspeaker").html(""); $("#avgline").html(""); | $("#avgspeaker").html(""); $("#avgline").html(""); | ||
第380行: | 第388行: | ||
} else if(blacksign == 2){ | } else if(blacksign == 2){ | ||
blacksign = 0; | blacksign = 0; | ||
+ | if(!$("#avgbgm").attr("src") && $("#avgbgm")[0].paused){ | ||
+ | $("#avgbgm").attr("src", $("#avgbgm").attr("src-save")); // this black is for ending mp4 | ||
+ | $("#avgbgm")[0].play(); | ||
+ | } | ||
} | } | ||
第385行: | 第397行: | ||
if(thisline.indexOf("<BGM>") != -1){ | if(thisline.indexOf("<BGM>") != -1){ | ||
$("#avgbgm").attr("src", bgmarray[thisline.slice(thisline.indexOf("<BGM>") + ("<BGM>").length, thisline.indexOf("</BGM>"))]); | $("#avgbgm").attr("src", bgmarray[thisline.slice(thisline.indexOf("<BGM>") + ("<BGM>").length, thisline.indexOf("</BGM>"))]); | ||
+ | $("#avgbgm").attr("src-save", bgmarray[thisline.slice(thisline.indexOf("<BGM>") + ("<BGM>").length, thisline.indexOf("</BGM>"))]); | ||
$("#avgbgm")[0].play(); | $("#avgbgm")[0].play(); | ||
+ | } | ||
+ | |||
+ | // sound effect | ||
+ | if(thisline.indexOf("<SE1>") != -1){ | ||
+ | while(thisline.indexOf("<SE1>") != -1){ | ||
+ | sound = thisline.slice(thisline.indexOf("<SE1>") + ("<SE1>").length, thisline.indexOf("</SE1>")); | ||
+ | thisline = thisline.replace("<SE1>" + sound + "</SE1>", ""); | ||
+ | |||
+ | let audio = new Audio(); | ||
+ | audio.addEventListener("ended", function(){ $(this).remove();}); | ||
+ | $(audio).attr({"src":searray[sound], "preload":"preload", "controls":"controls"}); | ||
+ | $(audio).addClass(".avgsound"); | ||
+ | audio.play(); | ||
+ | |||
+ | if($("#avgsound").attr("state") == "off") audio.muted = true; | ||
+ | audio.volume = Number($("#avgsoundwidth").attr("state")) / 10; | ||
+ | } | ||
} | } | ||
第722行: | 第752行: | ||
/*------ first load, preload, display loading information ------*/ | /*------ first load, preload, display loading information ------*/ | ||
function firstloading(){ | function firstloading(){ | ||
− | loadingfin = {doll:0, bg:0, bgm:0, eff:0}; | + | loadingfin = {doll:0, bg:0, bgm:0, se:0, eff:0}; |
− | loadingnow = {doll:0, bg:0, bgm:0, eff:0}; | + | loadingnow = {doll:0, bg:0, bgm:0, se:0, eff:0}; |
var logpos = 0; | var logpos = 0; | ||
− | var loading = {doll:[], bg:[], bgm:[], eff:[]}; | + | var loading = {doll:[], bg:[], bgm:[], se:[], eff:[]}; |
/*--------------------------- key word query, console that not in the array ---------------------------*/ | /*--------------------------- key word query, console that not in the array ---------------------------*/ | ||
第773行: | 第803行: | ||
if(a == loading.bgm[i].ID){ sign = 0; break; } | if(a == loading.bgm[i].ID){ sign = 0; break; } | ||
} if(sign) loading.bgm.push({"ID":a, "URL":bgmarray[a]}); | } if(sign) loading.bgm.push({"ID":a, "URL":bgmarray[a]}); | ||
+ | } | ||
+ | if(thisline.indexOf("<SE1>") != -1){ | ||
+ | while(thisline.indexOf("<SE1>") != -1){ | ||
+ | let sign = 1; | ||
+ | let a = thisline.slice(thisline.indexOf("<SE1>") + ("<SE1>").length, thisline.indexOf("</SE1>")); | ||
+ | thisline = thisline.replace("<SE1>" + a + "</SE1>", ""); | ||
+ | for(let i = 0; i < loading.se.length; i++){ | ||
+ | if(a == loading.se[i].ID){ sign = 0; break; } | ||
+ | } if(sign) loading.se.push({"ID":a, "URL":searray[a]}); | ||
+ | } | ||
} | } | ||
if(thisline.indexOf("<BIN>") != -1){ | if(thisline.indexOf("<BIN>") != -1){ | ||
第806行: | 第846行: | ||
/*----------------- console loading urls ---------------*/ | /*----------------- console loading urls ---------------*/ | ||
− | console.log("Character Image | + | console.log("Character Image", loading.doll); |
− | console.log("Background CG | + | console.log("Background CG", loading.bg); |
− | console.log("Background Music | + | console.log("Background Music", loading.bgm); |
− | console.log("Common Effect | + | console.log("Sound Effect", loading.se); |
+ | console.log("Common Effect", loading.eff); | ||
console.log("********* Console end *********"); | console.log("********* Console end *********"); | ||
loadingfin.doll = loading.doll.length; | loadingfin.doll = loading.doll.length; | ||
loadingfin.bg = loading.bg.length; | loadingfin.bg = loading.bg.length; | ||
loadingfin.bgm = loading.bgm.length; | loadingfin.bgm = loading.bgm.length; | ||
+ | loadingfin.se = loading.se.length; | ||
loadingfin.eff = loading.eff.length; | loadingfin.eff = loading.eff.length; | ||
loading_sub(); | loading_sub(); | ||
第840行: | 第882行: | ||
}); | }); | ||
$(audio).attr({"src":bgmarray[loading.bgm[i].ID], "file":loadingfile, "preload":"preload", "controls":"controls"}); | $(audio).attr({"src":bgmarray[loading.bgm[i].ID], "file":loadingfile, "preload":"preload", "controls":"controls"}); | ||
+ | } | ||
+ | for(i in loading.se){ | ||
+ | let audio = new Audio(); | ||
+ | audio.addEventListener("canplaythrough", function(){ | ||
+ | if($(this).attr("file") == loadingfile) loadingnow.se ++; | ||
+ | loading_sub(); $(this).remove(); | ||
+ | }); | ||
+ | $(audio).attr({"src":searray[loading.se[i].ID], "file":loadingfile, "preload":"preload", "controls":"controls"}); | ||
} | } | ||
for(i in loading.eff){ | for(i in loading.eff){ | ||
第863行: | 第913行: | ||
function loading_sub(){ | function loading_sub(){ | ||
− | $("#avgload").html(`加载进度: PIC[${loadingnow.doll}/${loadingfin.doll}] CG[${loadingnow.bg}/${loadingfin.bg}] BGM[${loadingnow.bgm}/${loadingfin.bgm}] | + | $("#avgload").html(`加载进度: PIC[${loadingnow.doll}/${loadingfin.doll}] CG[${loadingnow.bg}/${loadingfin.bg}] BGM[${loadingnow.bgm}/${loadingfin.bgm}] SE[${loadingnow.se}/${loadingfin.se}] E[${loadingnow.eff}/${loadingfin.eff}]`); |
} | } | ||
/*---------------------------特效code 创建---------------------------*/ | /*---------------------------特效code 创建---------------------------*/ | ||
function effect_creat(effect_name){ | function effect_creat(effect_name){ | ||
− | if(effect_name == "%%code= | + | if(effect_name.slice(0, ("%%code=AVG_ink").length) == "%%code=AVG_ink") { |
let new_element = document.createElement('video'); | let new_element = document.createElement('video'); | ||
$(new_element).attr({"class":"avgefect", "autoplay":"autoplay", "preload":"auto", "src":effarray[effect_name]}); | $(new_element).attr({"class":"avgefect", "autoplay":"autoplay", "preload":"auto", "src":effarray[effect_name]}); | ||
$(new_element).css({"position":"absolute", "width":"1200px", "height":"675px", "top":"0px", "left":"0px", "overflow":"hidden", "z-index":"1"}); | $(new_element).css({"position":"absolute", "width":"1200px", "height":"675px", "top":"0px", "left":"0px", "overflow":"hidden", "z-index":"1"}); | ||
− | $(new_element).bind('ended', function(){ $(this).remove(); }); | + | $(new_element).bind('ended', function(){ $(this).remove();}); |
$("#avgbox").append(new_element); | $("#avgbox").append(new_element); | ||
+ | $("#avgbgm")[0].pause(); | ||
} else if(effect_name.slice(0, ("%%code=NPC_TV").length) == "%%code=NPC_TV"){ | } else if(effect_name.slice(0, ("%%code=NPC_TV").length) == "%%code=NPC_TV"){ | ||
let new_element = document.createElement('img'); | let new_element = document.createElement('img'); |