@ -22,6 +22,8 @@ if (!norunFlag) {
var sleepTimer_ = null ;
var sleepTimer_ = null ;
var AITalkFlag = false ;
var AITalkFlag = false ;
var talkNum = 0 ;
var talkNum = 0 ;
// 暴露到全局,供 pjax.js 在页面切换后重新调用
window . _live2d = { initTips : null , showMessage : null , showHitokoto : null } ;
( function ( ) {
( function ( ) {
function renderTip ( template , context ) {
function renderTip ( template , context ) {
var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g ;
var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g ;
@ -33,11 +35,11 @@ if (!norunFlag) {
var currentObject = context ;
var currentObject = context ;
var i , length , variable ;
var i , length , variable ;
for ( i = 0 , length = variables . length ; i < length ; ++ i ) {
for ( i = 0 , length = variables . length ; i < length ; ++ i ) {
variable = variables [ i ] ;
currentObject = currentObject [ variable ] ;
if ( currentObject === undefined || currentObject === null ) return '' ;
variable = currentObject [ variables [ i ] ] ;
if ( variable === undefined || variable === null ) return '' ;
currentObject = variable ;
}
}
return currentObject ;
return String ( currentObject ) ;
} ) ;
} ) ;
}
}
@ -56,14 +58,20 @@ if (!norunFlag) {
showMessage ( '你都复制了些什么呀,转载要记得加上出处哦~~' , 5000 ) ;
showMessage ( '你都复制了些什么呀,转载要记得加上出处哦~~' , 5000 ) ;
} ) ;
} ) ;
// 缓存 message.json 数据,供 PJAX 重绑定使用
var tipsData = null ;
function initTips ( ) {
function initTips ( ) {
$ . ajax ( {
$ . ajax ( {
cache : true ,
cache : true ,
url : message_Path + 'message.json' ,
url : message_Path + 'message.json' ,
dataType : "json" ,
dataType : "json" ,
success : function ( result ) {
success : function ( result ) {
tipsData = result ;
// 解绑旧事件(用命名空间避免影响其他绑定)
$ . each ( result . mouseover , function ( index , tips ) {
$ . each ( result . mouseover , function ( index , tips ) {
$ ( tips . selector ) . mouseover ( function ( ) {
$ ( tips . selector ) . off ( 'mouseover._live2d_tips mouseout._live2d_tips' ) ;
$ ( tips . selector ) . on ( 'mouseover._live2d_tips' , function ( ) {
var text = tips . text ;
var text = tips . text ;
if ( Array . isArray ( tips . text ) ) text = tips . text [ Math . floor ( Math . random ( ) * tips . text . length + 1 ) - 1 ] ;
if ( Array . isArray ( tips . text ) ) text = tips . text [ Math . floor ( Math . random ( ) * tips . text . length + 1 ) - 1 ] ;
text = text . renderTip ( { text : $ ( this ) . text ( ) } ) ;
text = text . renderTip ( { text : $ ( this ) . text ( ) } ) ;
@ -72,7 +80,7 @@ if (!norunFlag) {
clearInterval ( liveTlakTimer ) ;
clearInterval ( liveTlakTimer ) ;
liveTlakTimer = null ;
liveTlakTimer = null ;
} ) ;
} ) ;
$ ( tips . selector ) . mouseout ( function ( ) {
$ ( tips . selector ) . on ( 'mouseout._live2d_tips' , function ( ) {
showHitokoto ( ) ;
showHitokoto ( ) ;
if ( liveTlakTimer == null ) {
if ( liveTlakTimer == null ) {
liveTlakTimer = window . setInterval ( function ( ) {
liveTlakTimer = window . setInterval ( function ( ) {
@ -82,7 +90,8 @@ if (!norunFlag) {
} ) ;
} ) ;
} ) ;
} ) ;
$ . each ( result . click , function ( index , tips ) {
$ . each ( result . click , function ( index , tips ) {
$ ( tips . selector ) . click ( function ( ) {
$ ( tips . selector ) . off ( 'click._live2d_tips' ) ;
$ ( tips . selector ) . on ( 'click._live2d_tips' , function ( ) {
if ( hitFlag ) {
if ( hitFlag ) {
return false
return false
}
}
@ -106,23 +115,26 @@ if (!norunFlag) {
}
}
} ) ;
} ) ;
}
}
window . _live2d . initTips = initTips ;
initTips ( ) ;
initTips ( ) ;
var text ;
var text ;
if ( document . referrer !== '' && document . referrer . split ( '/' ) [ 2 ] !== window . location . host ) {
if ( document . referrer !== '' && document . referrer . split ( '/' ) [ 2 ] !== window . location . host ) {
var referrer = document . createElement ( 'a' ) ;
var referrer = document . createElement ( 'a' ) ;
referrer . href = document . referrer ;
referrer . href = document . referrer ;
text = '嗨!来自 <span style="color:#0099cc;">' + referrer . hostname + '</span> 的朋友!' ;
var domain = referrer . hostname . split ( '.' ) [ 1 ] ;
var domain = referrer . hostname . split ( '.' ) [ 1 ] ;
if ( domain == 'baidu' ) {
text = '嗨! 来自 百度搜索 的朋友!<br>欢迎访问<span style="color:#0099cc;">「 ' + document . title . split ( ' | ' ) [ 0 ] + ' 」</span>' ;
} else if ( domain == 'so' ) {
text = '嗨! 来自 360搜索 的朋友!<br>欢迎访问<span style="color:#0099cc;">「 ' + document . title . split ( ' | ' ) [ 0 ] + ' 」</span>' ;
} else if ( domain == 'google' ) {
text = '嗨! 来自 谷歌搜索 的朋友!<br>欢迎访问<span style="color:#0099cc;">「 ' + document . title . split ( ' | ' ) [ 0 ] + ' 」</span>' ;
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 {
} else {
if ( window . location . pathname == "/" ) { //主页URL判断,需要斜杠结尾
// pjax.js 尚未加载时的兜底(首次访问且 pjax.js 在 message.js 之后加载)
if ( window . location . pathname == "/" ) {
var now = ( new Date ( ) ) . getHours ( ) ;
var now = ( new Date ( ) ) . getHours ( ) ;
if ( now > 23 || now <= 5 ) {
if ( now > 23 || now <= 5 ) {
text = '你是夜猫子呀?这么晚还不睡觉,明天起的来嘛?' ;
text = '你是夜猫子呀?这么晚还不睡觉,明天起的来嘛?' ;
@ -172,6 +184,7 @@ if (!norunFlag) {
console . log ( sleepTimer_ ) ;
console . log ( sleepTimer_ ) ;
}
}
}
}
window . _live2d . showHitokoto = showHitokoto ;
function checkSleep ( ) {
function checkSleep ( ) {
var sleepStatu = sessionStorage . getItem ( "Sleepy" ) ;
var sleepStatu = sessionStorage . getItem ( "Sleepy" ) ;
@ -213,6 +226,7 @@ if (!norunFlag) {
//if (timeout === null) timeout = 5000;
//if (timeout === null) timeout = 5000;
//hideMessage(timeout);
//hideMessage(timeout);
}
}
window . _live2d . showMessage = showMessage ;
function talkValTimer ( ) {
function talkValTimer ( ) {
$ ( '#live_talk' ) . val ( '1' ) ;
$ ( '#live_talk' ) . val ( '1' ) ;
}
}
@ -384,74 +398,100 @@ if (!norunFlag) {
} ;
} ;
} ;
} ;
//获取音乐信息初始化
//获取音乐信息初始化
var bgmListInfo = $ ( 'input[name=live2dBGM]' ) ;
if ( bgmListInfo . length == 0 ) {
$ ( '#musicButton' ) . hide ( ) ;
} else {
var bgmPlayNow = parseInt ( $ ( '#live2d_bgm' ) . attr ( 'data-bgm' ) ) ;
var bgmPlayTime = 0 ;
var live2dBGM_Num = sessionStorage . getItem ( "live2dBGM_Num" ) ;
var live2dBGM_PlayTime = sessionStorage . getItem ( "live2dBGM_PlayTime" ) ;
if ( live2dBGM_Num ) {
if ( live2dBGM_Num <= $ ( 'input[name=live2dBGM]' ) . length - 1 ) {
bgmPlayNow = parseInt ( live2dBGM_Num ) ;
}
}
if ( live2dBGM_PlayTime ) {
bgmPlayTime = parseInt ( live2dBGM_PlayTime ) ;
}
var live2dBGMSrc = bgmListInfo . eq ( bgmPlayNow ) . val ( ) ;
$ ( '#live2d_bgm' ) . attr ( 'data-bgm' , bgmPlayNow ) ;
$ ( '#live2d_bgm' ) . attr ( 'src' , live2dBGMSrc ) ;
$ ( '#live2d_bgm' ) [ 0 ] . currentTime = bgmPlayTime ;
$ ( '#live2d_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' ) {
$ ( '#live2d_bgm' ) [ 0 ] . play ( ) ;
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' ) ;
$ ( '#musicButton' ) . addClass ( 'play' ) ;
sessionStorage . setItem ( "live2dBGM_IsPlay" , '0' ) ;
}
}
sessionStorage . setItem ( "live2dBGM_WindowClose" , '1' ) ;
$ ( '#musicButton' ) . on ( 'click' , function ( ) {
if ( $ ( '#musicButton' ) . hasClass ( 'play' ) ) {
$ ( '#live2d_bgm' ) [ 0 ] . pause ( ) ;
$ ( '#musicButton' ) . removeClass ( 'play' ) ;
sessionStorage . setItem ( "live2dBGM_IsPlay" , '1' ) ;
} else {
$ ( '#live2d_bgm' ) [ 0 ] . play ( ) ;
$ ( '#musicButton' ) . addClass ( 'play' ) ;
sessionStorage . setItem ( "live2dBGM_IsPlay" , '0' ) ;
}
} ) ;
window . onbeforeunload = function ( ) {
sessionStorage . setItem ( "live2dBGM_WindowClose" , '0' ) ;
if ( $ ( '#musicButton' ) . hasClass ( 'play' ) ) {
sessionStorage . setItem ( "live2dBGM_IsPlay" , '0' ) ;
}
}
document . getElementById ( 'live2d_bgm' ) . addEventListener ( "timeupdate" , function ( ) {
var live2dBgmPlayTimeNow = document . getElementById ( 'live2d_bgm' ) . currentTime ;
sessionStorage . setItem ( "live2dBGM_PlayTime" , live2dBgmPlayTimeNow ) ;
} ) ;
// BGM 事件监听(仅绑定一次,使用标志位避免重复)
if ( ! window . _live2d . _bgmEventsBound ) {
$bgm [ 0 ] . addEventListener ( "timeupdate" , function ( ) {
sessionStorage . setItem ( "live2dBGM_PlayTime" , $bgm [ 0 ] . currentTime ) ;
} ) ;
} ) ;
document . getElementById ( 'live2d_bgm' ) . addEventListener ( "ended" , function ( ) {
var listNow = parseInt ( $ ( '#live2d_ bgm' ) . attr ( 'data-bgm' ) ) ;
$bgm [ 0 ] . addEventListener ( "ended" , function ( ) {
var listNow = parseInt ( $bgm . attr ( 'data-bgm' ) ) ;
listNow ++ ;
listNow ++ ;
if ( listNow > $ ( 'input[name=live2dBGM]' ) . length - 1 ) {
var inputs = $ ( 'input[name=live2dBGM]' ) ;
if ( inputs . length === 0 ) return ;
if ( listNow > inputs . length - 1 ) {
listNow = 0 ;
listNow = 0 ;
}
}
var listNewSrc = $ ( 'input[name=live2dBGM]' ) . eq ( listNow ) . val ( ) ;
var listNewSrc = inputs . eq ( listNow ) . val ( ) ;
if ( ! listNewSrc ) return ;
sessionStorage . setItem ( "live2dBGM_Num" , listNow ) ;
sessionStorage . setItem ( "live2dBGM_Num" , listNow ) ;
$ ( '#live2d_ bgm' ) . attr ( 'src' , listNewSrc ) ;
$ ( '#live2d_ bgm' ) [ 0 ] . play ( ) ;
$ ( '#live2d_ bgm' ) . attr ( 'data-bgm' , listNow ) ;
$bgm . attr ( 'src' , listNewSrc ) ;
$bgm [ 0 ] . play ( ) ;
$bgm . attr ( 'data-bgm' , listNow ) ;
} ) ;
} ) ;
document . getElementById ( 'live2d_bgm' ) . addEventListener ( "error" , function ( ) {
$ ( '#live2d_ bgm' ) [ 0 ] . pause ( ) ;
$bgm [ 0 ] . addEventListener ( "error" , function ( ) {
$bgm [ 0 ] . pause ( ) ;
$ ( '#musicButton' ) . removeClass ( 'play' ) ;
$ ( '#musicButton' ) . removeClass ( 'play' ) ;
showMessage ( '音乐似乎加载不出来了呢!' , 0 ) ;
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 ( ) {
$ ( document ) . ready ( function ( ) {
var AIimgSrc = [
var AIimgSrc = [
message_Path + "model/histoire/histoire.1024/texture_00.png" ,
message_Path + "model/histoire/histoire.1024/texture_00.png" ,