diff --git a/live2d/dist/bundle.js b/live2d/dist/bundle.js index 7416e73..fbe497b 100644 --- a/live2d/dist/bundle.js +++ b/live2d/dist/bundle.js @@ -388,7 +388,7 @@ eval("/*\n * Copyright Joyent, Inc. and other Node contributors.\n *\n * Permiss /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var pixi_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! pixi.js */ \"./node_modules/pixi.js/lib/index.mjs\");\n/* harmony import */ var pixi_live2d_display__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! pixi-live2d-display */ \"./node_modules/pixi-live2d-display/dist/index.es.js\");\n\n\n\nfunction ap_init() {\n $(\".aplayer-body\").addClass(\"my-hide\");\n ap.lrc.hide(); //初始化时隐藏歌词\n ap.on('play', () => ap.lrc.show());\n ap.on('pause', () => ap.lrc.hide());\n}\n\nvar music_flag=false;\nfunction aplayer_panel_toggle(){\n\tif(music_flag){\n\t\t$(\".aplayer.aplayer-fixed .aplayer-body\").addClass(\"my-hide\");\n\t\t$(\".aplayer.aplayer-fixed .aplayer-list\").addClass(\"my-hide zero-margin-bottom\");\n\t\tmusic_flag=false;\n\t}\n\telse{\n\t\t$(\".aplayer.aplayer-fixed .aplayer-body\").removeClass(\"my-hide\");\n\t\t$(\".aplayer.aplayer-fixed .aplayer-list\").removeClass(\"my-hide zero-margin-bottom\");\n\t\tmusic_flag=true;\n\t}\n}\n\nfunction loadWidget() {\n\tlocalStorage.removeItem(\"waifu-display\");\n\tsessionStorage.removeItem(\"waifu-text\");\n\tdocument.body.insertAdjacentHTML(\"beforeend\", `
\n\t\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
`);\n\tsetTimeout(() => {\n\t\tdocument.getElementById(\"waifu\").style.bottom = 0;\n\t}, 0);\n\n\tfunction registerEventListener(result) {\n\t\tdocument.querySelector(\"#waifu-tool .fa-music\").addEventListener(\"click\", () => {\n\t\t\tap.toggle();\n\t\t});\n\t\tdocument.querySelector(\"#waifu-tool .fa-comment\").addEventListener(\"click\", showHitokoto);\n\t\tdocument.querySelector(\"#waifu-tool .fa-user-circle\").addEventListener(\"click\", loadNextModel);\n\t\tdocument.querySelector(\"#waifu-tool .fa-times\").addEventListener(\"click\", () => {\n\t\t\tlocalStorage.setItem(\"waifu-display\", Date.now());\n\t\t\tshowMessage(\"人生海海,祝你有帆也有岸。\", 2000, 11);\n\t\t\tdocument.getElementById(\"waifu\").style.bottom = \"-500px\";\n\t\t\tsetTimeout(() => {\n\t\t\t\tdocument.getElementById(\"waifu\").style.display = \"none\";\n\t\t\t\tdocument.getElementById(\"waifu-toggle\").classList.add(\"waifu-toggle-active\");\n\t\t\t}, 3000);\n\t\t});\n\t\t// 检测用户活动状态,并在空闲时显示消息\n let userAction = false,\n userActionTimer,\n messageArray = result.message.default,\n lastHoverElement;\n window.addEventListener(\"mousemove\", () => userAction = true);\n window.addEventListener(\"keydown\", () => userAction = true);\n setInterval(() => {\n if (userAction) {\n userAction = false;\n clearInterval(userActionTimer);\n userActionTimer = null;\n } else if (!userActionTimer) {\n userActionTimer = setInterval(() => {\n showMessage(messageArray, 6000, 9);\n }, 20000);\n }\n }, 1000);\n\t\tshowMessage(welcomeMessage(result.time), 7000, 11);\n window.addEventListener(\"mouseover\", event => {\n \t\tfor (let tips of result.mouseover) {\n \t\t\tif (!event.target.matches(tips.selector)) continue;\n \t\t\tlet text = randomSelection(tips.text);\n \t\t\ttext = text.replace(\"{text}\", event.target.innerText);\n \t\t\tshowMessage(text, 4000, 8);\n \t\t\treturn;\n \t\t}\n \t});\n \twindow.addEventListener(\"click\", event => {\n \t\tfor (let tips of result.click) {\n \t\t\tif (!event.target.matches(tips.selector)) continue;\n \t\t\tlet text = randomSelection(tips.text);\n \t\t\ttext = text.replace(\"{text}\", event.target.innerText);\n \t\t\tshowMessage(text, 4000, 8);\n \t\t\treturn;\n \t\t}\n \t});\n \t$(\"#live2d\").mousedown(function(e) {\n\t if(e.which==3){\n\t showMessage(result.message.secret_path,4000,12);\n\t\t\t}\n \t});\n \t$(\"#live2d\").bind(\"contextmenu\", function(e) {\n \t return false;\n \t});\n \tresult.seasons.forEach(({ date, text }) => {\n const now = new Date(),\n after = date.split(\"-\")[0],\n before = date.split(\"-\")[1] || after;\n if ((after.split(\"/\")[0] <= now.getMonth() + 1 && now.getMonth() + 1 <= before.split(\"/\")[0]) && (after.split(\"/\")[1] <= now.getDate() && now.getDate() <= before.split(\"/\")[1])) {\n text = randomSelection(text);\n text = text.replace(\"{year}\", now.getFullYear());\n messageArray.push(text);\n }\n });\n const devtools = () => { };\n console.log(\"%c\" + result.message.console, devtools);\n devtools.toString = () => {\n showMessage(result.message.console, 6000, 9);\n };\n window.addEventListener(\"copy\", () => {\n showMessage(result.message.copy, 6000, 9);\n });\n window.addEventListener(\"visibilitychange\", () => {\n if (!document.hidden) showMessage(result.message.visibilitychange, 6000, 9);\n });\n\t}\n\n function welcomeMessage(time) {\n if (location.pathname === \"/\") { // 如果是主页\n for (let { hour, text } of time) {\n const now = new Date(),\n after = hour.split(\"-\")[0],\n before = hour.split(\"-\")[1] || after;\n if (after <= now.getHours() && now.getHours() <= before) {\n return text;\n }\n }\n }\n const text = `欢迎阅读「${document.title.split(\" - \")[0]}」`;\n let from;\n if (document.referrer !== \"\") {\n const referrer = new URL(document.referrer),\n domain = referrer.hostname.split(\".\")[1];\n const domains = {\n \"baidu\": \"百度\",\n \"so\": \"360搜索\",\n \"google\": \"谷歌搜索\"\n };\n if (location.hostname === referrer.hostname) return text;\n if (domain in domains) from = domains[domain];\n else from = referrer.hostname;\n return `Hello!来自 ${from} 的朋友
${text}`;\n }\n return text;\n }\n \n let messageTimer;\n function showMessage(text, timeout, priority) {\n \tif (!text || (sessionStorage.getItem(\"waifu-text\") && sessionStorage.getItem(\"waifu-text\") > priority)) return;\n \tif (messageTimer) {\n \t\tclearTimeout(messageTimer);\n \t\tmessageTimer = null;\n \t}\n \ttext = randomSelection(text);\n \tsessionStorage.setItem(\"waifu-text\", priority);\n \tlet tips = document.getElementById(\"waifu-tips\");\n \ttips.innerHTML = text;\n \ttips.classList.add(\"waifu-tips-active\");\n \tmessageTimer = setTimeout(() => {\n \t\tsessionStorage.removeItem(\"waifu-text\");\n \t\ttips.classList.remove(\"waifu-tips-active\");\n \t}, timeout);\n }\n \n\tfunction showHitokoto() {\n\t\tfetch(\"https://v1.hitokoto.cn\")\n\t\t\t.then(response => response.json())\n\t\t\t.then(result => {\n\t\t\t\tshowMessage(result.hitokoto, 6000, 9);\n\t\t\t});\n\t}\n\t\n\tfunction randomSelection(obj) {\n \treturn Array.isArray(obj) ? obj[Math.floor(Math.random() * obj.length)] : obj;\n }\n\n\tlet modelList;\n\t(function initModel() {\n\t\tlet modelId = localStorage.getItem(\"modelId\"),\n\t\t\tmodelTexturesId = localStorage.getItem(\"modelTexturesId\");\n\t\tif (modelId === null) {\n\t\t\t// 首次访问加载 指定模型 的 指定材质\n\t\t\tconst hour = new Date().getHours();\n\t\t\tif(hour>=20 || hour<8){\n\t\t\t\tmodelId = 1; // 夜间模型ID\n\t\t\t}else{\n\t\t\t\tmodelId = 0; // 白天模型ID\n\t\t\t}\n\t\t\tmodelTexturesId = 0; // 材质ID\n\t\t}\n\t\t// loadModel(modelId, modelTexturesId);\n\t\tloadModelPixi(modelId, modelTexturesId);\n\t\tfetch(`${live2d_path}waifu-tips.json`)\n\t\t\t.then(response => response.json())\n\t\t\t.then(registerEventListener);\n\t})();\n\n\tasync function loadModelList() {\n\t\tlet response = await fetch(`${live2d_path}model_list.json`);\n\t\tlet result = await response.json();\n\t\tmodelList = result;\n\t}\n\n\tasync function loadModel(modelId, modelTexturesId, message) {\n\t\tlocalStorage.setItem(\"modelId\", modelId);\n\t\tlocalStorage.setItem(\"modelTexturesId\", modelTexturesId);\n\t\tshowMessage(message, 4000, 10);\n\t\tif (!modelList) await loadModelList();\n\t\tlet target = modelList.models[modelId];\n\t\tloadlive2d(\"live2d\", `${live2d_path}model/${target}/index.json`);\n\t\tconsole.log(`Live2D 模型 ${modelId}-${target} 加载完成`);\n\t}\n\n\tasync function loadNextModel() {\n\t\tlet modelId = localStorage.getItem(\"modelId\");\n\t\tif (!modelList) await loadModelList();\n\t\tlet index = (++modelId >= modelList.models.length) ? 0 : modelId;\n\t\t// loadModel(index, 0, modelList.messages[index]);\n\t\tloadModelPixi(index, 0, modelList.messages[index]);\n\t}\n\n\tasync function loadModelPixi(modelId, modelTexturesId, message) {\n\t\tlocalStorage.setItem(\"modelId\", modelId);\n\t\tlocalStorage.setItem(\"modelTexturesId\", modelTexturesId);\n\t\tshowMessage(message, 4000, 10);\n\t\tif (!modelList) await loadModelList();\n\t\tlet target = modelList.models[modelId];\n\t\tconst jsonpath = `${live2d_path}model/${target}/index.json`;\n\t\tconst element = document.getElementById(modelId);\n\t\tconst app = new pixi_js__WEBPACK_IMPORTED_MODULE_0__.Application({\n\t\tview: element,\n\t\ttransparent: true,\n\t\t});\n\t\tconst model = await pixi_live2d_display__WEBPACK_IMPORTED_MODULE_1__.Live2DModel.from(jsonpath);\n\n\t\tapp.stage.addChild(model);\n\t\t\n\t\tconst parentWidth = element.width;\n\t\tconst parentHeight = element.height;\n\t\t// Scale to fit the stage\n\t\tconst ratio = Math.min(\n\t\tparentWidth / model.width,\n\t\tparentHeight / model.height\n\t\t);\n\t\tmodel.scale.set(ratio, ratio);\n\t\t// Align bottom and center horizontally\n\t\t\n\t\tmodel.x = (parentWidth - model.width) / 2;\n\t\tmodel.y = parentHeight - model.height;\n\t\t\n\t}\n\n}\n\nfunction initWidget() {\n\tdocument.body.insertAdjacentHTML(\"beforeend\", `
\n\t\t\t猫 咪\n\t\t
`);\n\tlet toggle = document.getElementById(\"waifu-toggle\");\n\ttoggle.addEventListener(\"click\", () => {\n\t\ttoggle.classList.remove(\"waifu-toggle-active\");\n\t\tif (toggle.getAttribute(\"first-time\")) {\n\t\t\tloadWidget();\n\t\t\ttoggle.removeAttribute(\"first-time\");\n\t\t} else {\n\t\t\tlocalStorage.removeItem(\"waifu-display\");\n\t\t\tdocument.getElementById(\"waifu\").style.display = \"\";\n\t\t\tsetTimeout(() => {\n\t\t\t\tdocument.getElementById(\"waifu\").style.bottom = 0;\n\t\t\t}, 0);\n\t\t}\n\t});\n\tif (localStorage.getItem(\"waifu-display\") && Date.now() - localStorage.getItem(\"waifu-display\") <= 86400000) {\n\t\ttoggle.setAttribute(\"first-time\", true);\n\t\tsetTimeout(() => {\n\t\t\ttoggle.classList.add(\"waifu-toggle-active\");\n\t\t}, 0);\n\t} else {\n\t\tloadWidget();\n\t}\n}\n\nconsole.log('\\n' + ' %c Live2D with Music Player' + ' %c https://github.com/crowya/live2d ' + '\\n', 'color: #fadfa3; background: #030307; padding:5px 0;', 'background: #fadfa3; padding:5px 0;');\n\n\n//# sourceURL=webpack:///./waifu-tips.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var pixi_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! pixi.js */ \"./node_modules/pixi.js/lib/index.mjs\");\n/* harmony import */ var pixi_live2d_display__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! pixi-live2d-display */ \"./node_modules/pixi-live2d-display/dist/index.es.js\");\n\n\n\nfunction ap_init() {\n $(\".aplayer-body\").addClass(\"my-hide\");\n ap.lrc.hide(); //初始化时隐藏歌词\n ap.on('play', () => ap.lrc.show());\n ap.on('pause', () => ap.lrc.hide());\n}\n\nvar music_flag=false;\nfunction aplayer_panel_toggle(){\n\tif(music_flag){\n\t\t$(\".aplayer.aplayer-fixed .aplayer-body\").addClass(\"my-hide\");\n\t\t$(\".aplayer.aplayer-fixed .aplayer-list\").addClass(\"my-hide zero-margin-bottom\");\n\t\tmusic_flag=false;\n\t}\n\telse{\n\t\t$(\".aplayer.aplayer-fixed .aplayer-body\").removeClass(\"my-hide\");\n\t\t$(\".aplayer.aplayer-fixed .aplayer-list\").removeClass(\"my-hide zero-margin-bottom\");\n\t\tmusic_flag=true;\n\t}\n}\n\nfunction loadWidget() {\n\tlocalStorage.removeItem(\"waifu-display\");\n\tsessionStorage.removeItem(\"waifu-text\");\n\tdocument.body.insertAdjacentHTML(\"beforeend\", `
\n\t\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
`);\n\tsetTimeout(() => {\n\t\tdocument.getElementById(\"waifu\").style.bottom = 0;\n\t}, 0);\n\n\tfunction registerEventListener(result) {\n\t\tdocument.querySelector(\"#waifu-tool .fa-music\").addEventListener(\"click\", () => {\n\t\t\tap.toggle();\n\t\t});\n\t\tdocument.querySelector(\"#waifu-tool .fa-comment\").addEventListener(\"click\", showHitokoto);\n\t\tdocument.querySelector(\"#waifu-tool .fa-user-circle\").addEventListener(\"click\", loadNextModel);\n\t\tdocument.querySelector(\"#waifu-tool .fa-times\").addEventListener(\"click\", () => {\n\t\t\tlocalStorage.setItem(\"waifu-display\", Date.now());\n\t\t\tshowMessage(\"人生海海,祝你有帆也有岸。\", 2000, 11);\n\t\t\tdocument.getElementById(\"waifu\").style.bottom = \"-500px\";\n\t\t\tsetTimeout(() => {\n\t\t\t\tdocument.getElementById(\"waifu\").style.display = \"none\";\n\t\t\t\tdocument.getElementById(\"waifu-toggle\").classList.add(\"waifu-toggle-active\");\n\t\t\t}, 3000);\n\t\t});\n\t\t// 检测用户活动状态,并在空闲时显示消息\n let userAction = false,\n userActionTimer,\n messageArray = result.message.default,\n lastHoverElement;\n window.addEventListener(\"mousemove\", () => userAction = true);\n window.addEventListener(\"keydown\", () => userAction = true);\n setInterval(() => {\n if (userAction) {\n userAction = false;\n clearInterval(userActionTimer);\n userActionTimer = null;\n } else if (!userActionTimer) {\n userActionTimer = setInterval(() => {\n showMessage(messageArray, 6000, 9);\n }, 20000);\n }\n }, 1000);\n\t\tshowMessage(welcomeMessage(result.time), 7000, 11);\n window.addEventListener(\"mouseover\", event => {\n \t\tfor (let tips of result.mouseover) {\n \t\t\tif (!event.target.matches(tips.selector)) continue;\n \t\t\tlet text = randomSelection(tips.text);\n \t\t\ttext = text.replace(\"{text}\", event.target.innerText);\n \t\t\tshowMessage(text, 4000, 8);\n \t\t\treturn;\n \t\t}\n \t});\n \twindow.addEventListener(\"click\", event => {\n \t\tfor (let tips of result.click) {\n \t\t\tif (!event.target.matches(tips.selector)) continue;\n \t\t\tlet text = randomSelection(tips.text);\n \t\t\ttext = text.replace(\"{text}\", event.target.innerText);\n \t\t\tshowMessage(text, 4000, 8);\n \t\t\treturn;\n \t\t}\n \t});\n \t$(\"#live2d\").mousedown(function(e) {\n\t if(e.which==3){\n\t showMessage(result.message.secret_path,4000,12);\n\t\t\t}\n \t});\n \t$(\"#live2d\").bind(\"contextmenu\", function(e) {\n \t return false;\n \t});\n \tresult.seasons.forEach(({ date, text }) => {\n const now = new Date(),\n after = date.split(\"-\")[0],\n before = date.split(\"-\")[1] || after;\n if ((after.split(\"/\")[0] <= now.getMonth() + 1 && now.getMonth() + 1 <= before.split(\"/\")[0]) && (after.split(\"/\")[1] <= now.getDate() && now.getDate() <= before.split(\"/\")[1])) {\n text = randomSelection(text);\n text = text.replace(\"{year}\", now.getFullYear());\n messageArray.push(text);\n }\n });\n const devtools = () => { };\n console.log(\"%c\" + result.message.console, devtools);\n devtools.toString = () => {\n showMessage(result.message.console, 6000, 9);\n };\n window.addEventListener(\"copy\", () => {\n showMessage(result.message.copy, 6000, 9);\n });\n window.addEventListener(\"visibilitychange\", () => {\n if (!document.hidden) showMessage(result.message.visibilitychange, 6000, 9);\n });\n\t}\n\n function welcomeMessage(time) {\n if (location.pathname === \"/\") { // 如果是主页\n for (let { hour, text } of time) {\n const now = new Date(),\n after = hour.split(\"-\")[0],\n before = hour.split(\"-\")[1] || after;\n if (after <= now.getHours() && now.getHours() <= before) {\n return text;\n }\n }\n }\n const text = `欢迎阅读「${document.title.split(\" - \")[0]}」`;\n let from;\n if (document.referrer !== \"\") {\n const referrer = new URL(document.referrer),\n domain = referrer.hostname.split(\".\")[1];\n const domains = {\n \"baidu\": \"百度\",\n \"so\": \"360搜索\",\n \"google\": \"谷歌搜索\"\n };\n if (location.hostname === referrer.hostname) return text;\n if (domain in domains) from = domains[domain];\n else from = referrer.hostname;\n return `Hello!来自 ${from} 的朋友
${text}`;\n }\n return text;\n }\n \n let messageTimer;\n function showMessage(text, timeout, priority) {\n \tif (!text || (sessionStorage.getItem(\"waifu-text\") && sessionStorage.getItem(\"waifu-text\") > priority)) return;\n \tif (messageTimer) {\n \t\tclearTimeout(messageTimer);\n \t\tmessageTimer = null;\n \t}\n \ttext = randomSelection(text);\n \tsessionStorage.setItem(\"waifu-text\", priority);\n \tlet tips = document.getElementById(\"waifu-tips\");\n \ttips.innerHTML = text;\n \ttips.classList.add(\"waifu-tips-active\");\n \tmessageTimer = setTimeout(() => {\n \t\tsessionStorage.removeItem(\"waifu-text\");\n \t\ttips.classList.remove(\"waifu-tips-active\");\n \t}, timeout);\n }\n \n\tfunction showHitokoto() {\n\t\tfetch(\"https://v1.hitokoto.cn\")\n\t\t\t.then(response => response.json())\n\t\t\t.then(result => {\n\t\t\t\tshowMessage(result.hitokoto, 6000, 9);\n\t\t\t});\n\t}\n\t\n\tfunction randomSelection(obj) {\n \treturn Array.isArray(obj) ? obj[Math.floor(Math.random() * obj.length)] : obj;\n }\n\n\tlet modelList;\n\t(function initModel() {\n\t\tlet modelId = localStorage.getItem(\"modelId\"),\n\t\t\tmodelTexturesId = localStorage.getItem(\"modelTexturesId\");\n\t\tif (modelId === null) {\n\t\t\t// 首次访问加载 指定模型 的 指定材质\n\t\t\tconst hour = new Date().getHours();\n\t\t\tif(hour>=20 || hour<8){\n\t\t\t\tmodelId = 1; // 夜间模型ID\n\t\t\t}else{\n\t\t\t\tmodelId = 0; // 白天模型ID\n\t\t\t}\n\t\t\tmodelTexturesId = 0; // 材质ID\n\t\t}\n\t\tloadModel(modelId, modelTexturesId);\n\t\tfetch(`${live2d_path}waifu-tips.json`)\n\t\t\t.then(response => response.json())\n\t\t\t.then(registerEventListener);\n\t})();\n\n\tasync function loadModelList() {\n\t\tlet response = await fetch(`${live2d_path}model_list.json`);\n\t\tlet result = await response.json();\n\t\tmodelList = result;\n\t}\n\n\tasync function loadModel(modelId, modelTexturesId, message) {\n\t\tlocalStorage.setItem(\"modelId\", modelId);\n\t\tlocalStorage.setItem(\"modelTexturesId\", modelTexturesId);\n\t\tshowMessage(message, 4000, 10);\n\t\tif (!modelList) await loadModelList();\n\t\tlet target = modelList.models[modelId];\n\t\t// loadlive2d(\"live2d\", `${live2d_path}model/${target}/index.json`);\n\t\tloadModelPixi(\"live2d\", `${live2d_path}model/${target}/index.json`);\n\t\tconsole.log(`Live2D 模型 ${modelId}-${target} 加载完成`);\n\t}\n\n\tasync function loadNextModel() {\n\t\tlet modelId = localStorage.getItem(\"modelId\");\n\t\tif (!modelList) await loadModelList();\n\t\tlet index = (++modelId >= modelList.models.length) ? 0 : modelId;\n\t\tloadModel(index, 0, modelList.messages[index]);\n\t}\n\n\twindow.PIXI = pixi_js__WEBPACK_IMPORTED_MODULE_0__;\n\n \tasync function loadModelPixi(id, jsonpath) {\n const element = document.getElementById(id);\n const app = new pixi_js__WEBPACK_IMPORTED_MODULE_0__.Application({\n view: element,\n transparent: true,\n });\n const model = await pixi_live2d_display__WEBPACK_IMPORTED_MODULE_1__.Live2DModel.from(jsonpath);\n\n app.stage.addChild(model);\n \n const parentWidth = element.width;\n const parentHeight = element.height;\n // Scale to fit the stage\n const ratio = Math.min(\n parentWidth / model.width,\n parentHeight / model.height\n );\n model.scale.set(ratio, ratio);\n // Align bottom and center horizontally\n \n model.x = (parentWidth - model.width) / 2;\n model.y = parentHeight - model.height;\n \n}\n\n}\n\nfunction initWidget() {\n\tdocument.body.insertAdjacentHTML(\"beforeend\", `
\n\t\t\t猫 咪\n\t\t
`);\n\tlet toggle = document.getElementById(\"waifu-toggle\");\n\ttoggle.addEventListener(\"click\", () => {\n\t\ttoggle.classList.remove(\"waifu-toggle-active\");\n\t\tif (toggle.getAttribute(\"first-time\")) {\n\t\t\tloadWidget();\n\t\t\ttoggle.removeAttribute(\"first-time\");\n\t\t} else {\n\t\t\tlocalStorage.removeItem(\"waifu-display\");\n\t\t\tdocument.getElementById(\"waifu\").style.display = \"\";\n\t\t\tsetTimeout(() => {\n\t\t\t\tdocument.getElementById(\"waifu\").style.bottom = 0;\n\t\t\t}, 0);\n\t\t}\n\t});\n\tif (localStorage.getItem(\"waifu-display\") && Date.now() - localStorage.getItem(\"waifu-display\") <= 86400000) {\n\t\ttoggle.setAttribute(\"first-time\", true);\n\t\tsetTimeout(() => {\n\t\t\ttoggle.classList.add(\"waifu-toggle-active\");\n\t\t}, 0);\n\t} else {\n\t\tloadWidget();\n\t}\n}\n\nconsole.log('\\n' + ' %c Live2D with Music Player' + ' %c https://github.com/crowya/live2d ' + '\\n', 'color: #fadfa3; background: #030307; padding:5px 0;', 'background: #fadfa3; padding:5px 0;');\n\n\n//# sourceURL=webpack:///./waifu-tips.js?"); /***/ }), diff --git a/live2d/waifu-tips.js b/live2d/waifu-tips.js index fa1dda4..2385e3b 100644 --- a/live2d/waifu-tips.js +++ b/live2d/waifu-tips.js @@ -1,3 +1,6 @@ +import * as PIXI from "pixi.js"; +import { Live2DModel } from "pixi-live2d-display"; + function ap_init() { $(".aplayer-body").addClass("my-hide"); ap.lrc.hide(); //初始化时隐藏歌词 @@ -192,8 +195,7 @@ function loadWidget() { } modelTexturesId = 0; // 材质ID } - // loadModel(modelId, modelTexturesId); - loadModelPixi(modelId, modelTexturesId); + loadModel(modelId, modelTexturesId); fetch(`${live2d_path}waifu-tips.json`) .then(response => response.json()) .then(registerEventListener); @@ -211,7 +213,8 @@ function loadWidget() { showMessage(message, 4000, 10); if (!modelList) await loadModelList(); let target = modelList.models[modelId]; - loadlive2d("live2d", `${live2d_path}model/${target}/index.json`); + // loadlive2d("live2d", `${live2d_path}model/${target}/index.json`); + loadModelPixi("live2d", `${live2d_path}model/${target}/index.json`); console.log(`Live2D 模型 ${modelId}-${target} 加载完成`); } @@ -219,40 +222,35 @@ function loadWidget() { let modelId = localStorage.getItem("modelId"); if (!modelList) await loadModelList(); let index = (++modelId >= modelList.models.length) ? 0 : modelId; - // loadModel(index, 0, modelList.messages[index]); - loadModelPixi(index, 0, modelList.messages[index]); + loadModel(index, 0, modelList.messages[index]); } - async function loadModelPixi(modelId, modelTexturesId, message) { - localStorage.setItem("modelId", modelId); - localStorage.setItem("modelTexturesId", modelTexturesId); - showMessage(message, 4000, 10); - if (!modelList) await loadModelList(); - let target = modelList.models[modelId]; - const jsonpath = `${live2d_path}model/${target}/index.json`; - const element = document.getElementById(modelId); - const app = new PIXI.Application({ - view: element, - transparent: true, - }); - const model = await Live2DModel.from(jsonpath); + window.PIXI = PIXI; - app.stage.addChild(model); - - const parentWidth = element.width; - const parentHeight = element.height; - // Scale to fit the stage - const ratio = Math.min( - parentWidth / model.width, - parentHeight / model.height - ); - model.scale.set(ratio, ratio); - // Align bottom and center horizontally - - model.x = (parentWidth - model.width) / 2; - model.y = parentHeight - model.height; - - } + async function loadModelPixi(id, jsonpath) { + const element = document.getElementById(id); + const app = new PIXI.Application({ + view: element, + transparent: true, + }); + const model = await Live2DModel.from(jsonpath); + + app.stage.addChild(model); + + const parentWidth = element.width; + const parentHeight = element.height; + // Scale to fit the stage + const ratio = Math.min( + parentWidth / model.width, + parentHeight / model.height + ); + model.scale.set(ratio, ratio); + // Align bottom and center horizontally + + model.x = (parentWidth - model.width) / 2; + model.y = parentHeight - model.height; + +} }