├── dt.gif ├── Tx2.gif ├── at.webp ├── at2.webp ├── at3.webp ├── at4.webp ├── alipay.webp ├── caidai.gif ├── cover3.webp ├── cover4.webp ├── favicon.ico ├── loading.gif ├── movie.webp ├── wechat.webp ├── bilibili.webp ├── homebg2.webp ├── homebg3.webp └── live2d-widget ├── autoload.js ├── waifu.css ├── waifu-tips.json ├── waifu-tips.js └── live2d.min.js /dt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/dt.gif -------------------------------------------------------------------------------- /Tx2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/Tx2.gif -------------------------------------------------------------------------------- /at.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/at.webp -------------------------------------------------------------------------------- /at2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/at2.webp -------------------------------------------------------------------------------- /at3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/at3.webp -------------------------------------------------------------------------------- /at4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/at4.webp -------------------------------------------------------------------------------- /alipay.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/alipay.webp -------------------------------------------------------------------------------- /caidai.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/caidai.gif -------------------------------------------------------------------------------- /cover3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/cover3.webp -------------------------------------------------------------------------------- /cover4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/cover4.webp -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/favicon.ico -------------------------------------------------------------------------------- /loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/loading.gif -------------------------------------------------------------------------------- /movie.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/movie.webp -------------------------------------------------------------------------------- /wechat.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/wechat.webp -------------------------------------------------------------------------------- /bilibili.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/bilibili.webp -------------------------------------------------------------------------------- /homebg2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/homebg2.webp -------------------------------------------------------------------------------- /homebg3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZZQ2417536071/Blog-static/HEAD/homebg3.webp -------------------------------------------------------------------------------- /live2d-widget/autoload.js: -------------------------------------------------------------------------------- 1 | // 注意:live2d_path 参数应使用绝对路径 2 | const live2d_path = "https://cdn.jsdelivr.net/gh/ZZQ2417536071/Blog-static/live2d-widget/"; 3 | // const live2d_path = "/live2d-widget/"; 4 | 5 | // 封装异步加载资源的方法 6 | function loadExternalResource(url, type) { 7 | return new Promise((resolve, reject) => { 8 | let tag; 9 | 10 | if (type === "css") { 11 | tag = document.createElement("link"); 12 | tag.rel = "stylesheet"; 13 | tag.href = url; 14 | } 15 | else if (type === "js") { 16 | tag = document.createElement("script"); 17 | tag.src = url; 18 | } 19 | if (tag) { 20 | tag.onload = () => resolve(url); 21 | tag.onerror = () => reject(url); 22 | document.head.appendChild(tag); 23 | } 24 | }); 25 | } 26 | 27 | // 加载 waifu.css live2d.min.js waifu-tips.js 28 | if (screen.width >= 768) { 29 | Promise.all([ 30 | loadExternalResource(live2d_path + "waifu.css", "css"), 31 | loadExternalResource(live2d_path + "live2d.min.js", "js"), 32 | loadExternalResource(live2d_path + "waifu-tips.js", "js") 33 | ]).then(() => { 34 | initWidget({ 35 | waifuPath: live2d_path + "waifu-tips.json", 36 | //apiPath: "https://live2d.fghrsh.net/api/", 37 | // cdnPath: "https://cdn.jsdelivr.net/gh/fghrsh/live2d_api/" 38 | cdnPath: "https://live2d-api.vercel.app/" 39 | //cdnPath: "https://cdn.jsdelivr.net/gh/fghrsh/live2d_api/" 40 | }); 41 | }); 42 | } 43 | // initWidget 第一个参数为 waifu-tips.json 的路径,第二个参数为 API 地址 44 | // API 后端可自行搭建,参考 https://github.com/fghrsh/live2d_api 45 | // 初始化看板娘会自动加载指定目录下的 waifu-tips.json 46 | 47 | console.log(` 48 | ヽ. / ,ー、 〉 49 | \ ', !-─‐-i / /´ 50 | /`ー' L//`ヽ、 51 | / /, /| , , ', 52 | イ / /-‐/ i L_ ハ ヽ! i 53 | レ ヘ 7イ`ト レ'ァ-ト、!ハ| | 54 | !,/7 '0' ´0iソ| | 55 | |.从" _ ,,,, / |./ | 56 | レ'| i>.、,,__ _,.イ / .i | 57 | レ'| | / k_7_/レ'ヽ, ハ. | 58 | | |/i 〈|/ i ,.ヘ | i | 59 | .|/ / i: ヘ! \ | 60 | kヽ>、ハ _,.ヘ、 /、! 61 | !'〈//`T´', \ `'7'ーr' 62 | レ'ヽL__|___i,___,ンレ|ノ 63 | ト-,/ |___./ 64 | 'ー' !_,.: 65 | `); 66 | -------------------------------------------------------------------------------- /live2d-widget/waifu.css: -------------------------------------------------------------------------------- 1 | #waifu-toggle { 2 | background-color: #fa0; 3 | border-radius: 5px; 4 | bottom: 80px; 5 | color: #fff; 6 | cursor: pointer; 7 | font-size: 12px; 8 | left: 2px; 9 | margin-left: -100px; 10 | padding: 5px 2px 5px 5px; 11 | position: fixed; 12 | transition: margin-left 1s; 13 | width: 70px; 14 | writing-mode: vertical-rl; 15 | } 16 | 17 | #waifu-toggle.waifu-toggle-active { 18 | margin-left: -50px; 19 | } 20 | 21 | #waifu-toggle.waifu-toggle-active:hover { 22 | margin-left: -30px; 23 | } 24 | 25 | #waifu { 26 | bottom: -1000px; 27 | right: 80px; 28 | line-height: 0; 29 | margin-bottom: -10px; 30 | position: fixed; 31 | transform: translateY(3px); 32 | transition: transform .3s ease-in-out, bottom 3s ease-in-out; 33 | z-index: 1; 34 | } 35 | 36 | #waifu:hover { 37 | transform: translateY(0); 38 | } 39 | 40 | #waifu-tips { 41 | animation: shake 50s ease-in-out 5s infinite; 42 | background-color: rgba(236, 217, 188, .5); 43 | border: 1px solid rgba(224, 186, 140, .62); 44 | border-radius: 12px; 45 | box-shadow: 0 3px 15px 2px rgba(191, 158, 118, .2); 46 | font-size: 14px; 47 | line-height: 24px; 48 | margin: -30px 20px; 49 | min-height: 70px; 50 | opacity: 0; 51 | overflow: hidden; 52 | padding: 5px 10px; 53 | position: absolute; 54 | text-overflow: ellipsis; 55 | transition: opacity 1s; 56 | width: 250px; 57 | word-break: break-all; 58 | } 59 | 60 | #waifu-tips.waifu-tips-active { 61 | opacity: 1; 62 | transition: opacity .2s; 63 | } 64 | 65 | #waifu-tips span { 66 | color: #0099cc; 67 | } 68 | 69 | #waifu #live2d { 70 | cursor: grab; 71 | height: 300px; 72 | position: relative; 73 | width: 280px; 74 | } 75 | 76 | #waifu #live2d:active { 77 | cursor: grabbing; 78 | } 79 | 80 | #waifu-tool { 81 | color: #aaa; 82 | opacity: 0; 83 | position: absolute; 84 | right: -10px; 85 | top: 70px; 86 | transition: opacity 1s; 87 | } 88 | 89 | #waifu:hover #waifu-tool { 90 | opacity: 1; 91 | } 92 | 93 | #waifu-tool span { 94 | color: #7b8c9d; 95 | cursor: pointer; 96 | display: block; 97 | line-height: 30px; 98 | text-align: center; 99 | transition: color .3s; 100 | } 101 | 102 | #waifu-tool span:hover { 103 | color: #0684bd; /* #34495e */ 104 | } 105 | 106 | @keyframes shake { 107 | 2% { 108 | transform: translate(.5px, -1.5px) rotate(-.5deg); 109 | } 110 | 111 | 4% { 112 | transform: translate(.5px, 1.5px) rotate(1.5deg); 113 | } 114 | 115 | 6% { 116 | transform: translate(1.5px, 1.5px) rotate(1.5deg); 117 | } 118 | 119 | 8% { 120 | transform: translate(2.5px, 1.5px) rotate(.5deg); 121 | } 122 | 123 | 10% { 124 | transform: translate(.5px, 2.5px) rotate(.5deg); 125 | } 126 | 127 | 12% { 128 | transform: translate(1.5px, 1.5px) rotate(.5deg); 129 | } 130 | 131 | 14% { 132 | transform: translate(.5px, .5px) rotate(.5deg); 133 | } 134 | 135 | 16% { 136 | transform: translate(-1.5px, -.5px) rotate(1.5deg); 137 | } 138 | 139 | 18% { 140 | transform: translate(.5px, .5px) rotate(1.5deg); 141 | } 142 | 143 | 20% { 144 | transform: translate(2.5px, 2.5px) rotate(1.5deg); 145 | } 146 | 147 | 22% { 148 | transform: translate(.5px, -1.5px) rotate(1.5deg); 149 | } 150 | 151 | 24% { 152 | transform: translate(-1.5px, 1.5px) rotate(-.5deg); 153 | } 154 | 155 | 26% { 156 | transform: translate(1.5px, .5px) rotate(1.5deg); 157 | } 158 | 159 | 28% { 160 | transform: translate(-.5px, -.5px) rotate(-.5deg); 161 | } 162 | 163 | 30% { 164 | transform: translate(1.5px, -.5px) rotate(-.5deg); 165 | } 166 | 167 | 32% { 168 | transform: translate(2.5px, -1.5px) rotate(1.5deg); 169 | } 170 | 171 | 34% { 172 | transform: translate(2.5px, 2.5px) rotate(-.5deg); 173 | } 174 | 175 | 36% { 176 | transform: translate(.5px, -1.5px) rotate(.5deg); 177 | } 178 | 179 | 38% { 180 | transform: translate(2.5px, -.5px) rotate(-.5deg); 181 | } 182 | 183 | 40% { 184 | transform: translate(-.5px, 2.5px) rotate(.5deg); 185 | } 186 | 187 | 42% { 188 | transform: translate(-1.5px, 2.5px) rotate(.5deg); 189 | } 190 | 191 | 44% { 192 | transform: translate(-1.5px, 1.5px) rotate(.5deg); 193 | } 194 | 195 | 46% { 196 | transform: translate(1.5px, -.5px) rotate(-.5deg); 197 | } 198 | 199 | 48% { 200 | transform: translate(2.5px, -.5px) rotate(.5deg); 201 | } 202 | 203 | 50% { 204 | transform: translate(-1.5px, 1.5px) rotate(.5deg); 205 | } 206 | 207 | 52% { 208 | transform: translate(-.5px, 1.5px) rotate(.5deg); 209 | } 210 | 211 | 54% { 212 | transform: translate(-1.5px, 1.5px) rotate(.5deg); 213 | } 214 | 215 | 56% { 216 | transform: translate(.5px, 2.5px) rotate(1.5deg); 217 | } 218 | 219 | 58% { 220 | transform: translate(2.5px, 2.5px) rotate(.5deg); 221 | } 222 | 223 | 60% { 224 | transform: translate(2.5px, -1.5px) rotate(1.5deg); 225 | } 226 | 227 | 62% { 228 | transform: translate(-1.5px, .5px) rotate(1.5deg); 229 | } 230 | 231 | 64% { 232 | transform: translate(-1.5px, 1.5px) rotate(1.5deg); 233 | } 234 | 235 | 66% { 236 | transform: translate(.5px, 2.5px) rotate(1.5deg); 237 | } 238 | 239 | 68% { 240 | transform: translate(2.5px, -1.5px) rotate(1.5deg); 241 | } 242 | 243 | 70% { 244 | transform: translate(2.5px, 2.5px) rotate(.5deg); 245 | } 246 | 247 | 72% { 248 | transform: translate(-.5px, -1.5px) rotate(1.5deg); 249 | } 250 | 251 | 74% { 252 | transform: translate(-1.5px, 2.5px) rotate(1.5deg); 253 | } 254 | 255 | 76% { 256 | transform: translate(-1.5px, 2.5px) rotate(1.5deg); 257 | } 258 | 259 | 78% { 260 | transform: translate(-1.5px, 2.5px) rotate(.5deg); 261 | } 262 | 263 | 80% { 264 | transform: translate(-1.5px, .5px) rotate(-.5deg); 265 | } 266 | 267 | 82% { 268 | transform: translate(-1.5px, .5px) rotate(-.5deg); 269 | } 270 | 271 | 84% { 272 | transform: translate(-.5px, .5px) rotate(1.5deg); 273 | } 274 | 275 | 86% { 276 | transform: translate(2.5px, 1.5px) rotate(.5deg); 277 | } 278 | 279 | 88% { 280 | transform: translate(-1.5px, .5px) rotate(1.5deg); 281 | } 282 | 283 | 90% { 284 | transform: translate(-1.5px, -.5px) rotate(-.5deg); 285 | } 286 | 287 | 92% { 288 | transform: translate(-1.5px, -1.5px) rotate(1.5deg); 289 | } 290 | 291 | 94% { 292 | transform: translate(.5px, .5px) rotate(-.5deg); 293 | } 294 | 295 | 96% { 296 | transform: translate(2.5px, -.5px) rotate(-.5deg); 297 | } 298 | 299 | 98% { 300 | transform: translate(-1.5px, -1.5px) rotate(-.5deg); 301 | } 302 | 303 | 0%, 100% { 304 | transform: translate(0, 0) rotate(0); 305 | } 306 | } 307 | -------------------------------------------------------------------------------- /live2d-widget/waifu-tips.json: -------------------------------------------------------------------------------- 1 | { 2 | "mouseover": [{ 3 | "selector": "#waifu #live2d", 4 | "text": ["干嘛呢你,快把手拿开~~", "鼠…鼠标放错地方了!", "你要干嘛呀?", "喵喵喵?", "怕怕(ノ≧∇≦)ノ", "非礼呀!救命!", "这样的话,只能使用武力了!", "我要生气了哦", "不要动手动脚的!", "真…真的是不知羞耻!", "Hentai!"] 5 | }, { 6 | "selector": "#waifu-tool .fa-comment", 7 | "text": ["猜猜我要说些什么?", "我从青蛙王子那里听到了不少人生经验。"] 8 | }, { 9 | "selector": "#waifu-tool .fa-paper-plane", 10 | "text": ["要不要来玩飞机大战?", "这个按钮上写着「不要点击」。", "怎么,你想来和我玩个游戏?", "听说这样可以蹦迪!"] 11 | }, { 12 | "selector": "#waifu-tool .fa-user-circle", 13 | "text": ["你是不是不爱人家了呀,呜呜呜~", "要见见我的姐姐嘛?", "想要看我妹妹嘛?", "要切换看板娘吗?"] 14 | }, { 15 | "selector": "#waifu-tool .fa-street-view", 16 | "text": ["喜欢换装 PLAY 吗?", "这次要扮演什么呢?", "变装!", "让我们看看接下来会发生什么!"] 17 | }, { 18 | "selector": "#waifu-tool .fa-camera-retro", 19 | "text": ["你要给我拍照呀?一二三~茄子~", "要不,我们来合影吧!", "保持微笑就好了~"] 20 | }, { 21 | "selector": "#waifu-tool .fa-info-circle", 22 | "text": ["想要知道更多关于我的事么?", "这里记录着我搬家的历史呢。", "你想深入了解我什么呢?"] 23 | }, { 24 | "selector": "#waifu-tool .fa-times", 25 | "text": ["到了要说再见的时候了吗?", "呜呜 QAQ 后会有期……", "不要抛弃我呀……", "我们,还能再见面吗……", "哼,你会后悔的!"] 26 | }, { 27 | "selector": ".menu-item-home a", 28 | "text": ["点击前往首页,想回到上一页可以使用浏览器的后退功能哦。", "点它就可以回到首页啦!", "回首页看看吧。"] 29 | }, { 30 | "selector": ".menu-item-about a", 31 | "text": ["你想知道我家主人是谁吗?", "这里有一些关于我家主人的秘密哦,要不要看看呢?", "发现主人出没地点!"] 32 | }, { 33 | "selector": ".menu-item-tags a", 34 | "text": ["点击就可以看文章的标签啦!", "点击来查看所有标签哦。"] 35 | }, { 36 | "selector": ".menu-item-categories a", 37 | "text": ["文章都分类好啦~", "点击来查看文章分类哦。"] 38 | }, { 39 | "selector": ".menu-item-archives a", 40 | "text": ["翻页比较麻烦吗,那就来看看文章归档吧。", "文章目录都整理在这里啦!"] 41 | }, { 42 | "selector": ".menu-item-friends a", 43 | "text": ["这是我的朋友们哦ヾ(◍°∇°◍)ノ゙", "要去大佬们的家看看吗?", "要去拜访一下我的朋友们吗?"] 44 | }, { 45 | "selector": ".menu-item-search a", 46 | "text": ["找不到想看的内容?搜索看看吧!", "在找什么东西呢,需要帮忙吗?"] 47 | }, { 48 | "selector": ".menu-item a", 49 | "text": ["快看看这里都有什么呢?"] 50 | }, { 51 | "selector": ".site-author", 52 | "text": ["我家主人好看吗?", "这是我家主人(*´∇`*)"] 53 | }, { 54 | "selector": ".site-state", 55 | "text": ["这是文章的统计信息~", "要不要点进去看看?"] 56 | }, { 57 | "selector": ".feed-link a", 58 | "text": ["这里可以使用 RSS 订阅呢!", "利用 feed 订阅器,就能快速知道博客有没有更新了呢。"] 59 | }, { 60 | "selector": ".cc-opacity, .post-copyright-author", 61 | "text": ["要记得规范转载哦。", "所有文章均采用 CC BY-NC-SA 4.0 许可协议~", "转载前要先注意下文章的版权协议呢。"] 62 | }, { 63 | "selector": ".links-of-author", 64 | "text": ["这里是主人的常驻地址哦。", "这里有主人的联系方式!"] 65 | }, { 66 | "selector": "#qrcode", 67 | "text": ["手机扫一下就能继续看,很方便呢~", "扫一扫,打开新世界的大门!"] 68 | }, { 69 | "selector": ".fancybox img, img.medium-zoom-image", 70 | "text": ["点击图片可以放大呢!"] 71 | }, { 72 | "selector": ".copy-btn", 73 | "text": ["代码可以直接点击复制哟。"] 74 | }, { 75 | "selector": ".highlight .table-container, .gist", 76 | "text": ["GitHub!我是新手!", "PHP 是最好的语言!"] 77 | }, { 78 | "selector": "a[href^='mailto']", 79 | "text": ["邮件我会及时回复的!", "点击就可以发送邮件啦~"] 80 | }, { 81 | "selector": "a[href^='/tags/']", 82 | "text": ["要去看看 {text} 标签么?", "点它可以查看此标签下的所有文章哟!"] 83 | }, { 84 | "selector": "a[href^='/categories/']", 85 | "text": ["要去看看 {text} 分类么?", "点它可以查看此分类下的所有文章哟!"] 86 | }, { 87 | "selector": ".post-title-link", 88 | "text": ["要看看 {text} 这篇文章吗?"] 89 | }, { 90 | "selector": "a[rel='contents']", 91 | "text": ["点击来阅读全文哦。"] 92 | }, { 93 | "selector": "a[itemprop='discussionUrl']", 94 | "text": ["要去看看评论吗?"] 95 | }, { 96 | "selector": ".beian a", 97 | "text": ["我也是有户口的人哦。", "我的主人可是遵纪守法的好主人。"] 98 | }, { 99 | "selector": ".container a[href^='http'], .nav-link .nav-text", 100 | "text": ["要去看看 {text} 么?", "去 {text} 逛逛吧。", "到 {text} 看看吧。"] 101 | }, { 102 | "selector": ".back-to-top", 103 | "text": ["点它就可以回到顶部啦!", "又回到最初的起点~", "要回到开始的地方么?"] 104 | }, { 105 | "selector": ".reward-container", 106 | "text": ["我是不是棒棒哒~快给我点赞吧!", "要打赏我嘛?好期待啊~", "主人最近在吃土呢,很辛苦的样子,给他一些钱钱吧~"] 107 | }, { 108 | "selector": "#wechat", 109 | "text": ["这是我的微信二维码~"] 110 | }, { 111 | "selector": "#alipay", 112 | "text": ["这是我的支付宝哦!"] 113 | }, { 114 | "selector": "#bitcoin", 115 | "text": ["这是我的比特币账号!"] 116 | }, { 117 | "selector": "#needsharebutton-postbottom .btn", 118 | "text": ["好东西要让更多人知道才行哦。", "觉得文章有帮助的话,可以分享给更多需要的朋友呢。"] 119 | }, { 120 | "selector": ".need-share-button_weibo", 121 | "text": ["微博?来分享一波喵!"] 122 | }, { 123 | "selector": ".need-share-button_wechat", 124 | "text": ["分享到微信吧!"] 125 | }, { 126 | "selector": ".need-share-button_douban", 127 | "text": ["分享到豆瓣好像也不错!"] 128 | }, { 129 | "selector": ".need-share-button_qqzone", 130 | "text": ["QQ 空间,一键转发,耶~"] 131 | }, { 132 | "selector": ".need-share-button_twitter", 133 | "text": ["Twitter?好像是不存在的东西?"] 134 | }, { 135 | "selector": ".need-share-button_facebook", 136 | "text": ["emmm…FB 好像也是不存在的东西?"] 137 | }, { 138 | "selector": ".post-nav-item a[rel='next']", 139 | "text": ["来看看下一篇文章吧。", "点它可以看下一篇文章哦!", "要翻到下一篇文章吗?"] 140 | }, { 141 | "selector": ".post-nav-item a[rel='prev']", 142 | "text": ["来看看上一篇文章吧。", "点它可以看上一篇文章哦!", "要翻到上一篇文章吗?"] 143 | }, { 144 | "selector": ".extend.next", 145 | "text": ["去下一页看看吧。", "点它可以前进哦!", "要翻到下一页吗?"] 146 | }, { 147 | "selector": ".extend.prev", 148 | "text": ["去上一页看看吧。", "点它可以后退哦!", "要翻到上一页吗?"] 149 | }, { 150 | "selector": "input.vnick", 151 | "text": ["该怎么称呼你呢?", "留下你的尊姓大名!"] 152 | }, { 153 | "selector": ".vmail", 154 | "text": ["留下你的邮箱,不然就是无头像人士了!", "记得设置好 Gravatar 头像哦!", "为了方便通知你最新消息,一定要留下邮箱!"] 155 | }, { 156 | "selector": ".vlink", 157 | "text": ["快快告诉我你的家在哪里,好让我去参观参观!"] 158 | }, { 159 | "selector": ".veditor", 160 | "text": ["想要去评论些什么吗?", "要说点什么吗?", "觉得博客不错?快来留言和主人交流吧!"] 161 | }, { 162 | "selector": ".vcontrol a", 163 | "text": ["你会不会熟练使用 Markdown 呀?", "使用 Markdown 让评论更美观吧~"] 164 | }, { 165 | "selector": ".vemoji-btn", 166 | "text": ["要插入一个萌萌哒的表情吗?", "要来一发表情吗?"] 167 | }, { 168 | "selector": ".vpreview-btn", 169 | "text": ["要预览一下你的发言吗?", "快看看你的评论有多少负熵!"] 170 | }, { 171 | "selector": ".vsubmit", 172 | "text": ["评论没有审核,要对自己的发言负责哦~", "要提交了吗,请耐心等待回复哦~"] 173 | }, { 174 | "selector": ".vcontent", 175 | "text": ["哇,快看看这个精彩评论!", "如果有疑问,请尽快留言哦~"] 176 | }], 177 | "click": [{ 178 | "selector": "#waifu #live2d", 179 | "text": ["是…是不小心碰到了吧…", "萝莉控是什么呀?", "你看到我的小熊了吗?", "再摸的话我可要报警了!⌇●﹏●⌇", "110 吗,这里有个变态一直在摸我(ó﹏ò。)", "不要摸我了,我会告诉老婆来打你的!", "干嘛动我呀!小心我咬你!", "别摸我,有什么好摸的!"] 180 | }, { 181 | "selector": ".veditor", 182 | "text": ["要吐槽些什么呢?", "一定要认真填写喵~", "有什么想说的吗?"] 183 | }, { 184 | "selector": ".vsubmit", 185 | "text": ["输入验证码就可以提交评论啦~"] 186 | }], 187 | "seasons": [{ 188 | "date": "01/01", 189 | "text": "元旦了呢,新的一年又开始了,今年是{year}年~" 190 | }, { 191 | "date": "02/14", 192 | "text": "又是一年情人节,{year}年找到对象了嘛~" 193 | }, { 194 | "date": "03/08", 195 | "text": "今天是国际妇女节!" 196 | }, { 197 | "date": "03/12", 198 | "text": "今天是植树节,要保护环境呀!" 199 | }, { 200 | "date": "04/01", 201 | "text": "悄悄告诉你一个秘密~今天是愚人节,不要被骗了哦~" 202 | }, { 203 | "date": "05/01", 204 | "text": "今天是五一劳动节,计划好假期去哪里了吗~" 205 | }, { 206 | "date": "06/01", 207 | "text": "儿童节了呢,快活的时光总是短暂,要是永远长不大该多好啊…" 208 | }, { 209 | "date": "09/03", 210 | "text": "中国人民抗日战争胜利纪念日,铭记历史、缅怀先烈、珍爱和平、开创未来。" 211 | }, { 212 | "date": "09/10", 213 | "text": "教师节,在学校要给老师问声好呀~" 214 | }, { 215 | "date": "10/01", 216 | "text": "国庆节到了,为祖国母亲庆生!" 217 | }, { 218 | "date": "11/05-11/12", 219 | "text": "今年的双十一是和谁一起过的呢~" 220 | }, { 221 | "date": "12/20-12/31", 222 | "text": "这几天是圣诞节,主人肯定又去剁手买买买了~" 223 | }] 224 | } 225 | -------------------------------------------------------------------------------- /live2d-widget/waifu-tips.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Live2D Widget 3 | * https://github.com/stevenjoezhang/live2d-widget 4 | */ 5 | 6 | function loadWidget(config) { 7 | let { waifuPath, apiPath, cdnPath } = config; 8 | let useCDN = false, modelList; 9 | if (typeof cdnPath === "string") { 10 | useCDN = true; 11 | if (!cdnPath.endsWith("/")) cdnPath += "/"; 12 | } else if (typeof apiPath === "string") { 13 | if (!apiPath.endsWith("/")) apiPath += "/"; 14 | } else { 15 | console.error("Invalid initWidget argument!"); 16 | return; 17 | } 18 | localStorage.removeItem("waifu-display"); 19 | sessionStorage.removeItem("waifu-text"); 20 | document.body.insertAdjacentHTML("beforeend", `
y||T>P&&T-P>y?T:T+(P-T)*_;var S=m+(p-m)*e;t.setParamFloat($,S)}}s>=this._$yT&&(this._$E?(r._$z2=i,this.loopFadeIn&&(r._$bs=i)):r._$9L=!0),this._$eP=e},J.prototype._$r0=function(){return this._$E},J.prototype._$aL=function(t){this._$E=t},J.prototype._$S0=function(){return this._$D0},J.prototype._$U0=function(t){this._$D0=t},J.prototype.isLoopFadeIn=function(){return this.loopFadeIn},J.prototype.setLoopFadeIn=function(t){this.loopFadeIn=t},N.prototype.clear=function(){this.size=0},N.prototype.add=function(t){if(this._$P.length<=this.size){var i=new Float32Array(2*this.size);w._$jT(this._$P,0,i,0,this.size),this._$P=i}this._$P[this.size++]=t},N.prototype._$BL=function(){var t=new Float32Array(this.size);return w._$jT(this._$P,0,t,0,this.size),t},B._$Fr=0,B._$hs=1,B._$ws=100,B._$Ns=101,B._$xs=102,B._$us=103,B._$qs=104,B._$Ys=105,Z.prototype=new I,Z._$gT=new Array,Z.prototype._$zP=function(){this._$GS=new D,this._$GS._$zP()},Z.prototype._$F0=function(t){I.prototype._$F0.call(this,t),this._$A=t._$6L(),this._$o=t._$6L(),this._$GS=t._$nP(),this._$Eo=t._$nP(),I.prototype.readV2_opacity.call(this,t)},Z.prototype.init=function(t){var i=new K(this),e=(this._$o+1)*(this._$A+1);return null!=i._$Cr&&(i._$Cr=null),i._$Cr=new Float32Array(2*e),null!=i._$hr&&(i._$hr=null),this._$32()?i._$hr=new Float32Array(2*e):i._$hr=null,i},Z.prototype._$Nr=function(t,i){var e=i;if(this._$GS._$Ur(t)){var r=this._$VT(),o=Z._$gT;o[0]=!1,v._$Vr(t,this._$GS,o,r,this._$Eo,e._$Cr,0,2),i._$Ib(o[0]),this.interpolateOpacity(t,this._$GS,i,o)}},Z.prototype._$2b=function(t,i){var e=i;if(e._$hS(!0),this._$32()){var r=this.getTargetBaseDataID();if(e._$8r==I._$ur&&(e._$8r=t.getBaseDataIndex(r)),e._$8r<0)at._$so&&_._$li("_$L _$0P _$G :: %s",r),e._$hS(!1);else{var o=t.getBaseData(e._$8r),n=t._$q2(e._$8r);if(null!=o&&n._$yo()){var s=n.getTotalScale();e.setTotalScale_notForClient(s);var a=n.getTotalOpacity();e.setTotalOpacity(a*e.getInterpolatedOpacity()),o._$nb(t,n,e._$Cr,e._$hr,this._$VT(),0,2),e._$hS(!0)}else e._$hS(!1)}}else e.setTotalOpacity(e.getInterpolatedOpacity())},Z.prototype._$nb=function(t,i,e,r,o,n,s){var _=i,a=null!=_._$hr?_._$hr:_._$Cr;Z.transformPoints_sdk2(e,r,o,n,s,a,this._$o,this._$A)},Z.transformPoints_sdk2=function(i,e,r,o,n,s,_,a){for(var h,l,$,u=r*n,p=0,f=0,c=0,d=0,g=0,y=0,m=!1,T=o;T=1){var b=s[2*(0+a*M)],F=s[2*(0+a*M)+1],C=p-2*c+1*g,N=f-2*d+1*y,x=p+3*g,O=f+3*y,D=p-2*c+3*g,R=f-2*d+3*y,B=.5*(v- -2),U=.5*(L-1);B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else{var G=0|S;G==a&&(G=a-1);var B=.5*(v- -2),U=S-G,Y=G/a,k=(G+1)/a,b=s[2*(0+G*M)],F=s[2*(0+G*M)+1],x=s[2*(0+(G+1)*M)],O=s[2*(0+(G+1)*M)+1],C=p-2*c+Y*g,N=f-2*d+Y*y,D=p-2*c+k*g,R=f-2*d+k*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(1<=v)if(L<=0){var D=s[2*(_+0*M)],R=s[2*(_+0*M)+1],x=p+3*c,O=f+3*d,C=p+1*c-2*g,N=f+1*d-2*y,b=p+3*c-2*g,F=f+3*d-2*y,B=.5*(v-1),U=.5*(L- -2);B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(L>=1){var C=s[2*(_+a*M)],N=s[2*(_+a*M)+1],b=p+3*c+1*g,F=f+3*d+1*y,D=p+1*c+3*g,R=f+1*d+3*y,x=p+3*c+3*g,O=f+3*d+3*y,B=.5*(v-1),U=.5*(L-1);B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else{var G=0|S;G==a&&(G=a-1);var B=.5*(v-1),U=S-G,Y=G/a,k=(G+1)/a,C=s[2*(_+G*M)],N=s[2*(_+G*M)+1],D=s[2*(_+(G+1)*M)],R=s[2*(_+(G+1)*M)+1],b=p+3*c+Y*g,F=f+3*d+Y*y,x=p+3*c+k*g,O=f+3*d+k*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(L<=0){var V=0|P;V==_&&(V=_-1);var B=P-V,U=.5*(L- -2),X=V/_,z=(V+1)/_,D=s[2*(V+0*M)],R=s[2*(V+0*M)+1],x=s[2*(V+1+0*M)],O=s[2*(V+1+0*M)+1],C=p+X*c-2*g,N=f+X*d-2*y,b=p+z*c-2*g,F=f+z*d-2*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(L>=1){var V=0|P;V==_&&(V=_-1);var B=P-V,U=.5*(L-1),X=V/_,z=(V+1)/_,C=s[2*(V+a*M)],N=s[2*(V+a*M)+1],b=s[2*(V+1+a*M)],F=s[2*(V+1+a*M)+1],D=p+X*c+3*g,R=f+X*d+3*y,x=p+z*c+3*g,O=f+z*d+3*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else t.err.printf("_$li calc : %.4f , %.4f\t\t\t\t\t@@BDBoxGrid\n",v,L);else e[T]=p+v*c+L*g,e[T+1]=f+v*d+L*y}else l=P-(0|P),$=S-(0|S),h=2*((0|P)+(0|S)*(_+1)),l+$<1?(e[T]=s[h]*(1-l-$)+s[h+2]*l+s[h+2*(_+1)]*$,e[T+1]=s[h+1]*(1-l-$)+s[h+3]*l+s[h+2*(_+1)+1]*$):(e[T]=s[h+2*(_+1)+2]*(l-1+$)+s[h+2*(_+1)]*(1-l)+s[h+2]*(1-$),e[T+1]=s[h+2*(_+1)+3]*(l-1+$)+s[h+2*(_+1)+1]*(1-l)+s[h+3]*(1-$))}},Z.prototype.transformPoints_sdk1=function(t,i,e,r,o,n,s){for(var _,a,h,l,$,u,p,f=i,c=this._$o,d=this._$A,g=o*s,y=null!=f._$hr?f._$hr:f._$Cr,m=n;m