blog_cn/Live2dHistoire/live2d/js/message.js

531 lines
16 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var userAgent = window.navigator.userAgent.toLowerCase();
console.log(userAgent);
var norunAI = ["android", "iphone", "ipod", "ipad", "windows phone"];
var norunFlag = false;
for (var i = 0; i < norunAI.length; i++) {
if (userAgent.indexOf(norunAI[i]) > -1) {
norunFlag = true;
break;
}
}
if (!window.WebGLRenderingContext) {
norunFlag = true;
}
if (!norunFlag) {
var hitFlag = false;
var AIFadeFlag = false;
var liveTlakTimer = null;
var sleepTimer_ = null;
var AITalkFlag = false;
var talkNum = 0;
// 暴露到全局,供 pjax.js 在页面切换后重新调用
window._live2d = { initTips: null, showMessage: null, showHitokoto: null };
(function () {
function renderTip(template, context) {
var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g;
return template.replace(tokenReg, function (word, slash1, token, slash2) {
if (slash1 || slash2) {
return word.replace(/\\/g, '');
}
var variables = token.replace(/\s/g, '').split('.');
var currentObject = context;
var i, length, variable;
for (i = 0, length = variables.length; i < length; ++i) {
variable = currentObject[variables[i]];
if (variable === undefined || variable === null) return '';
currentObject = variable;
}
return String(currentObject);
});
}
String.prototype.renderTip = function (context) {
return renderTip(this, context);
};
var re = /x/;
console.log(re);
re.toString = function () {
showMessage('哈哈,你打开了控制台,是想要看看我的秘密吗?', 5000);
return '';
};
$(document).on('copy', function () {
showMessage('你都复制了些什么呀,转载要记得加上出处哦~~', 5000);
});
// 缓存 message.json 数据,供 PJAX 重绑定使用
var tipsData = null;
function initTips() {
$.ajax({
cache: true,
url: message_Path + 'message.json',
dataType: "json",
success: function (result) {
tipsData = result;
// 解绑旧事件(用命名空间避免影响其他绑定)
$.each(result.mouseover, function (index, tips) {
$(tips.selector).off('mouseover._live2d_tips mouseout._live2d_tips');
$(tips.selector).on('mouseover._live2d_tips', function () {
var text = tips.text;
if (Array.isArray(tips.text)) text = tips.text[Math.floor(Math.random() * tips.text.length + 1) - 1];
text = text.renderTip({ text: $(this).text() });
showMessage(text, 3000);
talkValTimer();
clearInterval(liveTlakTimer);
liveTlakTimer = null;
});
$(tips.selector).on('mouseout._live2d_tips', function () {
showHitokoto();
if (liveTlakTimer == null) {
liveTlakTimer = window.setInterval(function () {
showHitokoto();
}, 15000);
};
});
});
$.each(result.click, function (index, tips) {
$(tips.selector).off('click._live2d_tips');
$(tips.selector).on('click._live2d_tips', function () {
if (hitFlag) {
return false
}
hitFlag = true;
setTimeout(function () {
hitFlag = false;
}, 8000);
var text = tips.text;
if (Array.isArray(tips.text)) text = tips.text[Math.floor(Math.random() * tips.text.length + 1) - 1];
text = text.renderTip({ text: $(this).text() });
showMessage(text, 3000);
});
clearInterval(liveTlakTimer);
liveTlakTimer = null;
if (liveTlakTimer == null) {
liveTlakTimer = window.setInterval(function () {
showHitokoto();
}, 15000);
};
});
}
});
}
window._live2d.initTips = initTips;
initTips();
var text;
if (document.referrer !== '' && document.referrer.split('/')[2] !== window.location.host) {
var referrer = document.createElement('a');
referrer.href = document.referrer;
var domain = referrer.hostname.split('.')[1];
if (domain == 'baidu' || domain == 'so' || domain == 'google') {
var source = domain == 'baidu' ? '百度搜索' : domain == 'so' ? '360搜索' : '谷歌搜索';
text = '嗨! 来自 ' + source + ' 的朋友!<br>欢迎访问<span style="color:#0099cc;">「 ' + document.title.split(' | ')[0] + ' 」</span>';
} else {
text = '嗨!来自 <span style="color:#0099cc;">' + referrer.hostname + '</span> 的朋友!';
}
} else if (typeof window._pjaxGetWelcomeText === 'function') {
// 复用 pjax.js 中的欢迎语生成函数,避免重复逻辑
text = window._pjaxGetWelcomeText();
} else {
// pjax.js 尚未加载时的兜底(首次访问且 pjax.js 在 message.js 之后加载)
if (window.location.pathname == "/") {
var now = (new Date()).getHours();
if (now > 23 || now <= 5) {
text = '你是夜猫子呀?这么晚还不睡觉,明天起的来嘛?';
} else if (now > 5 && now <= 7) {
text = '早上好!一日之计在于晨,美好的一天就要开始了!';
} else if (now > 7 && now <= 11) {
text = '上午好!工作顺利嘛,不要久坐,多起来走动走动哦!';
} else if (now > 11 && now <= 14) {
text = '中午了,工作了一个上午,现在是午餐时间!';
} else if (now > 14 && now <= 17) {
text = '午后很容易犯困呢,今天的运动目标完成了吗?';
} else if (now > 17 && now <= 19) {
text = '傍晚了!窗外夕阳的景色很美丽呢,最美不过夕阳红~~';
} else if (now > 19 && now <= 21) {
text = '晚上好,今天过得怎么样?';
} else if (now > 21 && now <= 23) {
text = '已经这么晚了呀,早点休息吧,晚安~~';
} else {
text = '嗨~ 快来逗我玩吧!';
}
} else {
text = '欢迎阅读<span style="color:#0099cc;">「 ' + document.title.split(' | ')[0] + ' 」</span>';
}
}
showMessage(text, 12000);
})();
liveTlakTimer = setInterval(function () {
showHitokoto();
}, 15000);
function showHitokoto() {
if (sessionStorage.getItem("Sleepy") !== "1") {
if (!AITalkFlag) {
$.getJSON('https://hitokoto.mayx.eu.org/', function (result) {
talkValTimer();
showMessage(result.hitokoto, 0);
});
}
} else {
hideMessage(0);
if (sleepTimer_ == null) {
sleepTimer_ = setInterval(function () {
checkSleep();
}, 200);
}
console.log(sleepTimer_);
}
}
window._live2d.showHitokoto = showHitokoto;
function checkSleep() {
var sleepStatu = sessionStorage.getItem("Sleepy");
if (sleepStatu !== '1') {
talkValTimer();
showMessage('你回来啦~', 0);
clearInterval(sleepTimer_);
sleepTimer_ = null;
}
}
function showMessage(text, timeout) {
if (Array.isArray(text)) text = text[Math.floor(Math.random() * text.length + 1) - 1];
//console.log('showMessage', text);
$('.message').stop();
if (typeof EventSource !== 'undefined' && text instanceof EventSource) {
var outputContainer = $('.message')[0];
var eventFlag = false;
text.onmessage = function (event) {
if (event.data == "[DONE]") {
text.close();
return;
} else {
if (!eventFlag) {
talkValTimer();
outputContainer.textContent = "";
eventFlag = true;
}
var data = JSON.parse(event.data);
if (data.response) {
outputContainer.textContent += data.response;
}
}
}
} else {
$('.message').html(text);
}
$('.message').fadeTo(200, 1);
//if (timeout === null) timeout = 5000;
//hideMessage(timeout);
}
window._live2d.showMessage = showMessage;
function talkValTimer() {
$('#live_talk').val('1');
}
function hideMessage(timeout) {
//$('.message').stop().css('opacity',1);
if (timeout === null) timeout = 5000;
$('.message').delay(timeout).fadeTo(200, 0);
}
function initLive2d() {
$("#landlord").mouseenter(function () {
$(".live_ico_box").fadeIn();
});
$("#landlord").mouseleave(function () {
$(".live_ico_box").fadeOut();
});
$('#hideButton').on('click', function () {
if (AIFadeFlag) {
return false;
} else {
AIFadeFlag = true;
localStorage.setItem("live2dhidden", "0");
$('#landlord').fadeOut(200);
$('#open_live2d').delay(200).fadeIn(200);
setTimeout(function () {
AIFadeFlag = false;
}, 300);
}
});
$('#open_live2d').on('click', function () {
if (AIFadeFlag) {
return false;
} else {
AIFadeFlag = true;
localStorage.setItem("live2dhidden", "1");
$('#open_live2d').fadeOut(200);
$('#landlord').delay(200).fadeIn(200);
setTimeout(function () {
AIFadeFlag = false;
}, 300);
}
});
$('#youduButton').on('click', function () {
if ($('#youduButton').hasClass('doudong')) {
var typeIs = $('#youduButton').attr('data-type');
$('#youduButton').removeClass('doudong');
$('body').removeClass(typeIs);
$('#youduButton').attr('data-type', '');
} else {
var duType = $('#duType').val();
var duArr = duType.split(",");
var dataType = duArr[Math.floor(Math.random() * duArr.length)];
$('#youduButton').addClass('doudong');
$('#youduButton').attr('data-type', dataType);
$('body').addClass(dataType);
}
});
if (talkAPI !== "" && typeof EventSource !== 'undefined') {
$('#showInfoBtn').on('click', function () {
var live_statu = $('#live_statu_val').val();
if (live_statu == "0") {
return
} else {
$('#live_statu_val').val("0");
$('.live_talk_input_body').fadeOut(500);
AITalkFlag = false;
showHitokoto();
$('#showTalkBtn').show();
$('#showInfoBtn').hide();
}
});
$('#showTalkBtn').on('click', function () {
var live_statu = $('#live_statu_val').val();
if (live_statu == "1") {
return
} else {
$('#live_statu_val').val("1");
$('.live_talk_input_body').fadeIn(500);
AITalkFlag = true;
$('#showTalkBtn').hide();
$('#showInfoBtn').show();
}
});
$('#live_talk_input_form').on('submit', function (e) {
e.preventDefault();
var info_ = $('#AIuserText').val();
// var userid_ = $('#AIuserName').val();
let add_id = "";
if ($('#load_this').prop("checked")) {
add_id = "&id=" + encodeURIComponent($('#post_id').val());
}
if (info_ == "") {
showMessage('写点什么吧!', 0);
return;
}
showMessage('思考中~', 0);
showMessage(new EventSource(talkAPI + "?info=" + encodeURIComponent(info_) + add_id));
});
} else {
$('#showInfoBtn').hide();
$('#showTalkBtn').hide();
}
// //获取用户名
// var live2dUser = sessionStorage.getItem("live2duser");
// if(live2dUser !== null){
// $('#AIuserName').val(live2dUser);
// }
//获取位置
var landL = sessionStorage.getItem("historywidth");
var landB = sessionStorage.getItem("historyheight");
if (landL == null || landB == null) {
landL = '5px'
landB = '0px'
}
$('#landlord').css('left', landL + 'px');
$('#landlord').css('bottom', landB + 'px');
//移动
function getEvent() {
return window.event || arguments.callee.caller.arguments[0];
}
var smcc = document.getElementById("landlord");
var moveX = 0;
var moveY = 0;
var moveBottom = 0;
var moveLeft = 0;
var moveable = false;
var docMouseMoveEvent = document.onmousemove;
var docMouseUpEvent = document.onmouseup;
smcc.onmousedown = function () {
var ent = getEvent();
moveable = true;
moveX = ent.clientX;
moveY = ent.clientY;
var obj = smcc;
moveBottom = parseInt(obj.style.bottom);
moveLeft = parseInt(obj.style.left);
if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0) {
window.getSelection().removeAllRanges();
}
document.onmousemove = function () {
if (moveable) {
var ent = getEvent();
var x = moveLeft + ent.clientX - moveX;
var y = moveBottom + (moveY - ent.clientY);
obj.style.left = x + "px";
obj.style.bottom = y + "px";
}
};
document.onmouseup = function () {
if (moveable) {
var historywidth = obj.style.left;
var historyheight = obj.style.bottom;
historywidth = historywidth.replace('px', '');
historyheight = historyheight.replace('px', '');
sessionStorage.setItem("historywidth", historywidth);
sessionStorage.setItem("historyheight", historyheight);
document.onmousemove = docMouseMoveEvent;
document.onmouseup = docMouseUpEvent;
moveable = false;
moveX = 0;
moveY = 0;
moveBottom = 0;
moveLeft = 0;
}
};
};
//获取音乐信息初始化
var $bgm = $('#live2d_bgm');
// 音乐按钮点击事件(幂等,使用命名空间避免重复绑定)
$('#musicButton').off('click._bgm').on('click._bgm', function () {
if ($('#musicButton').hasClass('play')) {
$bgm[0].pause();
$('#musicButton').removeClass('play');
sessionStorage.setItem("live2dBGM_IsPlay", '1');
} else {
$bgm[0].play();
$('#musicButton').addClass('play');
sessionStorage.setItem("live2dBGM_IsPlay", '0');
}
});
// BGM 事件监听(仅绑定一次,使用标志位避免重复)
if (!window._live2d._bgmEventsBound) {
$bgm[0].addEventListener("timeupdate", function () {
sessionStorage.setItem("live2dBGM_PlayTime", $bgm[0].currentTime);
});
$bgm[0].addEventListener("ended", function () {
var listNow = parseInt($bgm.attr('data-bgm'));
listNow++;
var inputs = $('input[name=live2dBGM]');
if (inputs.length === 0) return;
if (listNow > inputs.length - 1) {
listNow = 0;
}
var listNewSrc = inputs.eq(listNow).val();
if (!listNewSrc) return;
sessionStorage.setItem("live2dBGM_Num", listNow);
$bgm.attr('src', listNewSrc);
$bgm[0].play();
$bgm.attr('data-bgm', listNow);
});
$bgm[0].addEventListener("error", function () {
$bgm[0].pause();
$('#musicButton').removeClass('play');
showMessage('音乐似乎加载不出来了呢!', 0);
});
window.onbeforeunload = function () {
sessionStorage.setItem("live2dBGM_WindowClose", '0');
if ($('#musicButton').hasClass('play')) {
sessionStorage.setItem("live2dBGM_IsPlay", '0');
}
};
window._live2d._bgmEventsBound = true;
}
// 初始化 BGM根据当前页面是否有 BGM 输入)
if (typeof window._live2d.initBGM === 'function') {
window._live2d.initBGM();
}
}
// 暴露 BGM 初始化函数,供 PJAX 重初始化时调用
window._live2d.initBGM = function() {
var bgmListInfo = $('input[name=live2dBGM]');
var $bgm = $('#live2d_bgm');
if (bgmListInfo.length === 0) {
$('#musicButton').hide();
if ($bgm.length) $bgm[0].pause();
return;
}
var bgmPlayNow = parseInt($bgm.attr('data-bgm')) || 0;
var bgmPlayTime = 0;
var live2dBGM_Num = sessionStorage.getItem("live2dBGM_Num");
var live2dBGM_PlayTime = sessionStorage.getItem("live2dBGM_PlayTime");
if (live2dBGM_Num) {
if (parseInt(live2dBGM_Num) <= bgmListInfo.length - 1) {
bgmPlayNow = parseInt(live2dBGM_Num);
}
}
if (live2dBGM_PlayTime) {
bgmPlayTime = parseFloat(live2dBGM_PlayTime);
}
var newSrc = bgmListInfo.eq(bgmPlayNow).val();
$bgm.attr('data-bgm', bgmPlayNow);
if ($bgm.attr('src') !== newSrc) {
$bgm[0].pause();
$bgm.attr('src', newSrc);
$bgm[0].currentTime = bgmPlayTime;
}
$bgm[0].volume = 0.5;
var live2dBGM_IsPlay = sessionStorage.getItem("live2dBGM_IsPlay");
var live2dBGM_WindowClose = sessionStorage.getItem("live2dBGM_WindowClose");
if (live2dBGM_IsPlay == '0' && live2dBGM_WindowClose == '0') {
$bgm[0].play();
$('#musicButton').addClass('play');
}
sessionStorage.setItem("live2dBGM_WindowClose", '1');
$('#musicButton').show();
};
$(document).ready(function () {
var AIimgSrc = [
message_Path + "model/histoire/histoire.1024/texture_00.png",
message_Path + "model/histoire/histoire.1024/texture_01.png",
message_Path + "model/histoire/histoire.1024/texture_02.png",
message_Path + "model/histoire/histoire.1024/texture_03.png"
]
var images = [];
var imgLength = AIimgSrc.length;
var loadingNum = 0;
for (var i = 0; i < imgLength; i++) {
images[i] = new Image();
images[i].src = AIimgSrc[i];
images[i].onload = function () {
loadingNum++;
if (loadingNum === imgLength) {
var live2dhidden = localStorage.getItem("live2dhidden");
if (live2dhidden === "0") {
setTimeout(function () {
$('#open_live2d').fadeIn(200);
}, 1300);
} else {
setTimeout(function () {
$('#landlord').fadeIn(200);
}, 1300);
}
setTimeout(function () {
loadlive2d("live2d", message_Path + "model/histoire/model.json");
}, 1000);
initLive2d();
images = null;
}
}
}
});
}