define(['loadlive2d', 'axios'], function(loadlive2d, axios) { /** * 字符串模板替换 * 例如 template:"这是一个{text}内容", context:{text:"有趣的"} * return "这是一个有趣的内容" * @param {String} template 模板内容 * @param {Object} context 替换的内容 */ function render(template, context) { var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g; return template.replace(tokenReg, function (word, slash1, token, slash2) { if (slash1 || slash2) { return word.replace('\\', ''); } var variables = token.replace(/\s/g, '').split('.'); var currentObject = context; var i, length, variable; for (i = 0, length = variables.length; i < length; ++i) { variable = variables[i]; currentObject = currentObject[variable]; if (!currentObject) return ''; } return currentObject; }); } var re = /x/; console.log(re); re.toString = function() { showMessage('哈哈,你打开了控制台,是想要看看我的秘密吗?', 5000); return ''; }; document.addEventListener('copy', function(){ showMessage('你都复制了些什么呀,转载要记得加上出处哦', 5000); }) var tips = document.querySelector('.banner-tips'); var tipTimer = undefined; /** * 显示消息 * @param {Object} text 消息内容(如果是数组则显示其中的随机一个元素) * @param {Number} timeout 消失的延迟时间 */ function showMessage(text, timeout){ if(tipTimer) { window.clearTimeout(tipTimer); tipTimer = undefined; } if(Array.isArray(text)) text = text[Math.floor(Math.random() * text.length + 1)-1]; tips.innerHTML = text; tips.style.opacity = 1; hideMessage(timeout); } /** * 隐藏消息 * @param {Number} timeout 消失的延迟时间 */ function hideMessage(timeout){ tipTimer = setTimeout(function(){ tips.style.opacity = 0; }, timeout || 5000); } var text, productHref = [ 'https://www.colorfulsweet.site/', 'https://sookie2010.coding.me/', 'https://sookie2010.github.io/' ]; if(document.referrer){ var referrer = document.createElement('a'); referrer.href = document.referrer; text = 'Hello! 来自 ' + referrer.hostname + ' 的朋友'; var domain = referrer.hostname.split('.')[1]; if (domain == 'baidu') { text = 'Hello! 来自 百度搜索 的朋友
你是搜索 ' + referrer.search.split('&wd=')[1].split('&')[0] + ' 找到的我吗?'; }else if (domain == 'so') { text = 'Hello! 来自 360搜索 的朋友
你是搜索 ' + referrer.search.split('&q=')[1].split('&')[0] + ' 找到的我吗?'; }else if (domain == 'google') { text = 'Hello! 来自 谷歌搜索 的朋友
欢迎阅读『' + document.title.split(' - ')[0] + '』'; } }else { if (productHref.indexOf(window.location.href) !== -1) { //如果是主页 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 = '欢迎阅读『' + document.title.split('|')[0] + '』'; } } /** * 页面中元素触发的看板娘消息 */ function createTrigger(tips) { return function(){ var text = tips.text; if(Array.isArray(tips.text)) text = tips.text[Math.floor(Math.random() * tips.text.length + 1)-1]; text = render(text, {text: this.textContent}); showMessage(text, 3000); } } function bindElementEvent(url) { axios.get(url).then(function(res){ for(var eventName in res.data) { res.data[eventName].forEach(function(tips){ Array.prototype.forEach.call(document.querySelectorAll(tips.selector),function(item){ item.addEventListener(eventName, createTrigger(tips)); }); }); } }); } // 一言 function getHitokoto(){ axios.get('https://v1.hitokoto.cn/?encode=json&charset=utf-8&c=b&c=a&c=e').then(function(res){ showMessage(res.data.hitokoto, 5000); setTimeout(getHitokoto, 30000); }).catch(function(){ setTimeout(getHitokoto, 45000); }) } return { /** * 加载看板娘模型 * @param {Sting} modelUrl 模板的json描述文件路径 */ init: function(modelUrl){ axios.get(modelUrl).then(function(res){ var randomIndex = Math.floor(Math.random() * res.data.textures.length); //随机皮肤 if(window.location.href.startsWith('http://localhost') || ("ActiveXObject" in window)) { //本地开发调试或者是IE浏览器 res.data.textures = ['/resource/model/skin/'+res.data.textures[randomIndex]]; } else { //服务器部署运行(使用网易蜂巢对象存储) res.data.textures = ['https://blog-cdn.nos-eastchina1.126.net/live2D/'+res.data.textures[randomIndex]]; } loadlive2d('live2d', '/resource/', '', res.data); // loadlive2d("live2d", "/resource/model.json"); }); // 定时显示"一言" setTimeout(getHitokoto, 10000); // 按照json当中的配置给页面元素绑定事件 bindElementEvent("/resource/banner-tips.json"); showMessage(text, 6000); }, showMessage: showMessage } });