// 进行 fetch 请求 fetch('https://api.nsmao.net/api/ip/query?key=你的API密钥,从https://api.nsmao.net申请') .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => { ipLocation = data; if (isHomePage()) { showWelcome(); } }) .catch(error => console.error('Error:', error)); function getDistance(e1, n1, e2, n2) { const R = 6371; const { sin, cos, asin, PI, hypot } = Math; let getPoint = (e, n) => { e *= PI / 180; n *= PI / 180; return { x: cos(n) * cos(e), y: cos(n) * sin(e), z: sin(n) }; }; let a = getPoint(e1, n1); let b = getPoint(e2, n2); let c = hypot(a.x - b.x, a.y - b.y, a.z - b.z); let r = asin(c / 2) * 2 * R; return Math.round(r); } function showWelcome() { if (!ipLocation || !ipLocation.data) { console.error('ipLocation data is not available.'); return; } let dist = getDistance(120.3074357, 31.4933074, ipLocation.data.lng, ipLocation.data.lat); let pos = ipLocation.data.country; let ip = ipLocation.ip; let posdesc; // 新增ipv6显示为指定内容 if (ip.includes(":")) { ip = "
好复杂,咱看不懂~(ipv6)"; } // 以下的代码需要根据新API返回的结果进行相应的调整 switch (ipLocation.data.country) { case "日本": posdesc = "よろしく,一起去看樱花吗"; break; case "美国": posdesc = "Let us live in peace!"; break; case "英国": posdesc = "想同你一起夜乘伦敦眼"; break; case "俄罗斯": posdesc = "干了这瓶伏特加!"; break; case "法国": posdesc = "C'est La Vie"; break; case "德国": posdesc = "Die Zeit verging im Fluge."; break; case "澳大利亚": posdesc = "一起去大堡礁吧!"; break; case "加拿大": posdesc = "拾起一片枫叶赠予你"; break; case "中国": pos = ipLocation.data.prov + " " + ipLocation.data.city + " " + ipLocation.data.district; switch (ipLocation.data.prov) { case "北京": posdesc = "北——京——欢迎你~~~"; break; case "上海": posdesc = "走在外滩,感受历史与现代的交融。"; break; case "广东": switch (ipLocation.data.city) { case "广州": posdesc = "看小蛮腰,喝早茶了嘛~"; break; case "深圳": posdesc = "今天你逛商场了嘛~"; break; case "珠海": posdesc = "浪漫之城珠海,海风轻拂。"; break; case "东莞": posdesc = "东莞,制造业之都,经济活跃。"; break; case "佛山": posdesc = "佛山,武术之乡,陶瓷文化深厚。"; break; default: posdesc = "带你感受广东的热情与美食!"; break; } break; case "浙江": switch (ipLocation.data.city) { case "杭州": posdesc = "西湖美景,三月天~"; break; case "宁波": posdesc = "来宁波,感受大海的气息。"; break; case "温州": posdesc = "温州人杰地灵,商贸繁荣。"; break; case "绍兴": posdesc = "绍兴,酒乡文化,古韵悠长。"; break; case "湖州": posdesc = "湖州,太湖之滨,风景如画。"; break; default: posdesc = "这里是浙江,充满江南的韵味!"; break; } break; case "四川": switch (ipLocation.data.city) { case "成都": posdesc = "宽窄巷子,成都慢生活。"; break; case "绵阳": posdesc = "享受科技城的宁静与创新。"; break; case "自贡": posdesc = "自贡的盐文化与灯会,独具魅力。"; break; case "德阳": posdesc = "德阳,历史悠久,文化底蕴深厚。"; break; case "乐山": posdesc = "乐山大佛,世界文化遗产。"; break; default: posdesc = "来四川,品麻辣火锅,赏壮丽山河。"; break; } break; case "福建": switch (ipLocation.data.city) { case "厦门": posdesc = "鼓浪屿听海,厦门美食让人流连忘返。"; break; case "福州": posdesc = "有福之州,来此感受千年古城。"; break; case "泉州": posdesc = "泉州,海上丝绸之路的起点。"; break; case "漳州": posdesc = "漳州,古城文化与美食的结合。"; break; case "南平": posdesc = "南平,武夷山的自然风光。"; break; default: posdesc = "福建山水如画,美景无处不在。"; break; } break; case "山东": switch (ipLocation.data.city) { case "青岛": posdesc = "来青岛喝啤酒,看大海吧!"; break; case "济南": posdesc = "泉城济南,四面荷花三面柳。"; break; case "烟台": posdesc = "烟台的葡萄酒与海鲜,令人陶醉。"; break; case "潍坊": posdesc = "潍坊,风筝之都,文化底蕴深厚。"; break; case "德州": posdesc = "德州,扒鸡闻名,文化悠久。"; break; default: posdesc = "山东好客,欢迎来感受齐鲁文化!"; break; } break; case "江苏": switch (ipLocation.data.city) { case "南京": posdesc = "六朝古都南京,历史与现代的碰撞。"; break; case "苏州": posdesc = "来苏州,感受园林之美。"; break; case "无锡": posdesc = "无锡太湖美景,灵山大佛令人心旷神怡。"; break; case "常州": posdesc = "常州,文化与科技的交汇点。"; break; case "南通": posdesc = "南通,海门潮涌,文化底蕴深厚。"; break; default: posdesc = "水乡泽国,江南佳丽地。"; break; } break; case "河北": posdesc = "燕赵大地,英雄辈出的河北,等你探索!"; break; case "河南": switch (ipLocation.data.city) { case "郑州": posdesc = "中原大地,郑州是交通枢纽与历史重镇。"; break; case "洛阳": posdesc = "千年古都洛阳,牡丹花开的城。"; break; case "开封": posdesc = "开封,古都文化与美食的汇聚地。"; break; case "新乡": posdesc = "新乡,历史悠久,文化底蕴深厚。"; break; case "焦作": posdesc = "焦作,云台山的自然风光。"; break; default: posdesc = "这里是河南,历史悠久文化灿烂。"; break; } break; case "湖南": switch (ipLocation.data.city) { case "长沙": posdesc = "热辣长沙,吃小龙虾逛黄兴路步行街。"; break; case "岳阳": posdesc = "岳阳楼,洞庭湖的美景尽收眼底。"; break; case "株洲": posdesc = "株洲,火车制造业的发源地。"; break; case "湘潭": posdesc = "湘潭,伟人故里,文化底蕴深厚。"; break; default: posdesc = "湖南,烟雨迷蒙的湘江流过这片土地。"; break; } break; case "湖北": switch (ipLocation.data.city) { case "武汉": posdesc = "来大武汉,过长江大桥,吃热干面!"; break; case "宜昌": posdesc = "三峡大坝,壮丽的自然奇观。"; break; case "荆州": posdesc = "荆州,历史文化名城,古韵悠长。"; break; case "襄阳": posdesc = "襄阳,古城文化与美食的结合。"; break; default: posdesc = "湖北,长江中游的明珠,风景秀丽。"; break; } break; case "安徽": switch (ipLocation.data.city) { case "合肥": posdesc = "创新之城合肥,科教文化汇聚地。"; break; case "黄山": posdesc = "黄山,天下第一奇山,风景如画。"; break; case "芜湖": posdesc = "芜湖,长江之畔,文化底蕴深厚。"; break; case "马鞍山": posdesc = "马鞍山,文化与自然的完美结合。"; break; default: posdesc = "安徽山水,黄山、九华山欢迎你。"; break; } break; case "广西": switch (ipLocation.data.city) { case "桂林": posdesc = "桂林山水甲天下,风景如画。"; break; case "南宁": posdesc = "绿城南宁,宜居宜游。"; break; case "柳州": posdesc = "柳州的螺蛳粉,独具风味。"; break; case "防城港": posdesc = "防城港,海洋资源丰富,风景迷人。"; break; default: posdesc = "广西山清水秀,民俗风情浓郁。"; break; } break; case "贵州": switch (ipLocation.data.city) { case "贵阳": posdesc = "贵阳,山城之美,民族风情浓郁。"; break; case "遵义": posdesc = "遵义,红色之城,历史悠久。"; break; case "安顺": posdesc = "安顺,黄果树瀑布的故乡,风景如画。"; break; case "毕节": posdesc = "毕节,拥有丰富的自然资源与人文景观。"; break; case "六盘水": posdesc = "六盘水,凉爽的夏天,避暑胜地。"; break; case "铜仁": posdesc = "铜仁,秀美的山水与独特的民族文化。"; break; case "凯里": posdesc = "凯里,苗族文化的发源地,风情独特。"; break; default: posdesc = "来贵州,品茅台,赏黄果树瀑布。"; break; } break; case "云南": switch (ipLocation.data.city) { case "昆明": posdesc = "春城昆明,四季如春,风景秀丽。"; break; case "大理": posdesc = "苍山洱海,大理古城,你来了就不想走。"; break; case "丽江": posdesc = "丽江古城,纳西文化的瑰宝。"; break; case "西双版纳": posdesc = "西双版纳,热带雨林的奇妙之地。"; break; default: posdesc = "云南风景独特,风情万种。"; break; } break; case "西藏": switch (ipLocation.data.city) { case "拉萨": posdesc = "拉萨,西藏的首府,布达拉宫的故乡。"; break; case "日喀则": posdesc = "日喀则,历史悠久的文化名城。"; break; case "林芝": posdesc = "林芝,素有'西藏江南'之称,风景如画。"; break; case "昌都": posdesc = "昌都,历史悠久,文化底蕴深厚。"; break; case "山南": posdesc = "山南,藏文化的发源地之一。"; break; case "那曲": posdesc = "那曲,草原风光,牧民生活的地方。"; break; case "阿里": posdesc = "阿里,神秘的西部,拥有壮丽的自然景观。"; break; default: posdesc = "西藏,神秘而纯净,等待你的探索。"; break; } break; case "新疆维吾尔": posdesc = "辽阔新疆,民族风情与壮丽景观并存。"; switch (ipLocation.data.city) { case "乌鲁木齐": posdesc = "乌鲁木齐,天山脚下的城市,文化多元。"; break; case "喀什": posdesc = "喀什,古丝绸之路的重要节点,历史悠久。"; break; case "克拉玛依": posdesc = "克拉玛依,石油之城,经济发展迅速。"; break; case "吐鲁番": posdesc = "吐鲁番,火焰山的故乡,葡萄之乡。"; break; case "哈密": posdesc = "哈密,哈密瓜的发源地,风景如画。"; break; case "博乐": posdesc = "博乐,草原风光,民族文化交融。"; break; case "阿克苏": posdesc = "阿克苏,苹果之乡,风景秀丽。"; break; case "和田": posdesc = "和田,玉石之乡,历史文化深厚。"; break; default: posdesc = "新疆的城市各具特色,等待你的探索。"; break; } break; case "内蒙古": switch (ipLocation.data.city) { case "呼和浩特": posdesc = "呼和浩特,内蒙古的首府,历史悠久。"; break; case "包头": posdesc = "包头,钢铁之城,经济发展迅速。"; break; case "乌兰察布": posdesc = "乌兰察布,草原文化与现代城市的结合。"; break; case "赤峰": posdesc = "赤峰,拥有丰富的自然资源与人文景观。"; break; case "通辽": posdesc = "通辽,草原文化的发源地,风情独特。"; break; case "鄂尔多斯": posdesc = "鄂尔多斯,现代化城市与草原文化的交融。"; break; case "巴彦淖尔": posdesc = "巴彦淖尔,黄河之畔,风景如画。"; break; case "锡林郭勒": posdesc = "锡林郭勒,草原辽阔,马背上的民族风情。"; break; default: posdesc = "草原辽阔的内蒙古,等你来策马奔腾。"; break; } break; case "宁夏回族": posdesc = "宁夏,塞上江南,黄河流经的美丽地方。"; break; case "海南": posdesc = "阳光、沙滩、椰风海韵,欢迎来海南度假。"; break; case "陕西": switch (ipLocation.data.city) { case "西安": posdesc = "西安,古都文化与兵马俑的故乡。"; break; case "咸阳": posdesc = "咸阳,历史悠久,文化底蕴深厚。"; break; default: posdesc = "陕西,历史与文化的交汇之地。"; break; } break; case "甘肃": switch (ipLocation.data.city) { case "兰州": posdesc = "兰州,黄河之滨,牛肉面闻名。"; break; case "天水": posdesc = "天水,历史悠久,文化底蕴深厚。"; break; default: posdesc = "甘肃,丝绸之路的重要节点。"; break; } break; case "青海": switch (ipLocation.data.city) { case "西宁": posdesc = "西宁,青海湖的门户,风景如画。"; break; default: posdesc = "青海,湖泊与草原的美丽结合。"; break; } break; case "吉林": switch (ipLocation.data.city) { case "长春": posdesc = "长春,汽车城,文化底蕴深厚。"; break; case "吉林市": posdesc = "吉林市,松花江畔,风景如画。"; break; default: posdesc = "吉林,冰雪与文化的交融之地。"; break; } break; case "黑龙江": switch (ipLocation.data.city) { case "哈尔滨": posdesc = "哈尔滨,冰雪之城,俄罗斯风情浓厚。"; break; case "齐齐哈尔": posdesc = "齐齐哈尔,黑龙江的明珠,文化底蕴深厚。"; break; default: posdesc = "黑龙江,冰雪与文化的交汇之地。"; break; } break; default: posdesc = "带我去你的城逛逛吧!"; break; } break; default: posdesc = "带我去你的国家逛逛吧"; break; } // 根据本地时间切换欢迎语 let timeChange; let date = new Date(); if (date.getHours() >= 5 && date.getHours() < 11) timeChange = "🌤️ 早上好,一日之计在于晨"; else if (date.getHours() >= 11 && date.getHours() < 13) timeChange = "☀️ 中午好,记得午休喔~"; else if (date.getHours() >= 13 && date.getHours() < 17) timeChange = "🕞 下午好,饮茶先啦!"; else if (date.getHours() >= 17 && date.getHours() < 19) timeChange = "🚶‍♂️ 即将下班,记得按时吃饭~"; else if (date.getHours() >= 19 && date.getHours() < 24) timeChange = "🌙 晚上好,夜生活嗨起来!"; else timeChange = "夜深了,早点休息,少熬夜"; let welcomeInfoElement = document.getElementById("welcome-info"); if (welcomeInfoElement) { welcomeInfoElement.style.padding = "15px"; welcomeInfoElement.style.borderRadius = "8px"; welcomeInfoElement.style.boxShadow = "0 2px 4px rgba(0,0,0,0.1)"; // 可选:添加轻微阴影增强立体感 welcomeInfoElement.style.margin = "10px 0"; // 可选:添加上下外边距 welcomeInfoElement.style.lineHeight = "1.6"; // 可选:优化行间距 welcomeInfoElement.innerHTML = `欢迎来自 ${pos} 的小友💖
当前位置距博主约 ${dist.toFixed(2)} 公里!
${timeChange}
Tip:${posdesc}`; } else { console.log("Pjax无法获取元素"); } } // Pjax完成页面切换的事件回调处理 function handlePjaxComplete() { if (isHomePage()) { showWelcome(); } } function isHomePage() { return window.location.pathname === '/' || window.location.pathname === '/index.html'; } // 添加pjax:complete事件监听 window.onload = function () { if (isHomePage()) { showWelcome(); } document.addEventListener("pjax:complete", handlePjaxComplete); };