---
title: 在侧边栏中添加欢迎信息
abbrlink: da17d00
categories: 建站手札
tags: 网站
series: webcustom
date: 2025-08-10 19:30:40
summary: 添加侧边栏的欢迎信息
---
{% series webcustom %}
# 效果展示
# 开始折腾
## 申请腾讯地图的api key
{% link 腾讯地图,Tencent,https://lbs.qq.com/dev/console/application/mine %}
自行查看文档,要注意在填写信任域名时不填 `https://`
## 添加js
在主题 `/source/js/`目录下添加 `txmap.js`
```js
//get请求
$.ajax({
type: 'get',
url: 'https://apis.map.qq.com/ws/location/v1/ip',
data: {
key: '你的key',
output: 'jsonp',
callback: '?',
},
dataType: 'jsonp',
success: function (res) {
window.ipLocation = res;
}
})
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() {
let dist = getDistance(112.92358, 35.79807, ipLocation.result.location.lng, ipLocation.result.location.lat); //这里记得换成自己的经纬度
let pos = ipLocation.result.ad_info.nation;
let ip;
let posdesc;
//根据国家、省份、城市信息自定义欢迎语
switch (ipLocation.result.ad_info.nation) {
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.result.ad_info.province + " " + ipLocation.result.ad_info.city + " " + ipLocation.result.ad_info.district;
ip = ipLocation.result.ip;
switch (ipLocation.result.ad_info.province) {
case "北京市":
posdesc = "北——京——欢迎你~~~";
break;
case "天津市":
posdesc = "讲段相声吧";
break;
case "河北省":
posdesc = "山势巍巍成壁垒,天下雄关铁马金戈由此向,无限江山";
break;
case "山西省":
switch (ipLocation.result.ad_info.city) {
case "太原市":
posdesc = "秋叶蓝不城";
break;
case "晋城市":
posdesc = "一方水土养一方人,晋城话说给晋城人...";
break;
default:
posdesc = "展开坐具长三尺,已占山河五百余";
break;
}
break;
case "内蒙古自治区":
posdesc = "天苍苍,野茫茫,风吹草低见牛羊";
break;
case "辽宁省":
posdesc = "我想吃烤鸡架!";
break;
case "吉林省":
posdesc = "状元阁就是东北烧烤之王";
break;
case "黑龙江省":
posdesc = "很喜欢哈尔滨大剧院";
break;
case "上海市":
posdesc = "众所周知,中国只有两个城市";
break;
case "江苏省":
switch (ipLocation.result.ad_info.city) {
case "南京市":
posdesc = "这是我挺想去的城市啦";
break;
case "苏州市":
posdesc = "上有天堂,下有苏杭";
break;
default:
posdesc = "散装是必须要散装的";
break;
}
break;
case "浙江省":
posdesc = "东风渐绿西湖柳,雁已还人未南归";
break;
case "河南省":
switch (ipLocation.result.ad_info.city) {
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 "江西省":
posdesc = "落霞与孤鹜齐飞,秋水共长天一色";
break;
case "山东省":
posdesc = "遥望齐州九点烟,一泓海水杯中泻";
break;
case "湖北省":
switch (ipLocation.result.ad_info.city) {
case "黄冈市":
posdesc = "红安将军县!辈出将才!";
break;
default:
posdesc = "来碗热干面~";
break;
}
break;
case "湖南省":
posdesc = "74751,长沙斯塔克";
break;
case "广东省":
switch (ipLocation.result.ad_info.city) {
case "广州市":
posdesc = "看小蛮腰,喝早茶了嘛~";
break;
case "深圳市":
posdesc = "今天你逛商场了嘛~";
break;
case "阳江市":
posdesc = "阳春合水!博主家乡~ 欢迎来玩~";
break;
default:
posdesc = "来两斤福建人~";
break;
}
break;
case "广西壮族自治区":
posdesc = "桂林山水甲天下";
break;
case "海南省":
posdesc = "朝观日出逐白浪,夕看云起收霞光";
break;
case "四川省":
posdesc = "康康川妹子";
break;
case "贵州省":
posdesc = "茅台,学生,再塞200";
break;
case "云南省":
posdesc = "玉龙飞舞云缠绕,万仞冰川直耸天";
break;
case "西藏自治区":
posdesc = "躺在茫茫草原上,仰望蓝天";
break;
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;
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 = "夜深了,早点休息,少熬夜";
// 新增ipv6显示为指定内容
if (ip.includes(":")) {
ip = "
好复杂,咱看不懂~(ipv6)";
}
try {
//自定义文本和需要放的位置
document.getElementById("welcome-info").innerHTML =
`欢迎来自 ${pos} 的小友💖
${posdesc}🍂
当前位置距博主约 ${dist} 公里!
您的IP地址为:${ip}
${timeChange}
`;
} catch (err) {
console.log("Pjax无法获取元素")
}
}
window.onload = showWelcome;
// 如果使用了pjax在加上下面这行代码
document.addEventListener('pjax:complete', showWelcome);
```
## 添加css文件
在主题文件夹/source/css/在这里我添加了模糊IP地址。
```css
#welcome-info {
overflow: hidden;
border-radius: 14px;
--kouseki-welcome-color: #49B1F5;
--kouseki-ip-color: #49B1F5;
--kouseki-gl-size: 16px!important;
}
/* 给 IP 地址的 span 再包一层,便于选择器定位 */
/* JS 原文已经生成 IP,这里我们给这个 span 加类名 ip-mask */
/* 如果你不方便改 HTML,可直接用属性选择器:#welcome-info b span:nth-child(1) */
#welcome-info b span.ip-mask {
display: inline-block;
filter: blur(6px);
transition: filter .3s ease;
cursor: pointer;
user-select: none; /* 防止复制到模糊文本 */
}
/* 鼠标悬停或点击时(:active)立即清晰 */
#welcome-info b span.ip-mask:hover,
#welcome-info b span.ip-mask:active {
filter: blur(0);
}
/* 如果想做成「必须点一下才永久清晰」,把 :hover 去掉即可 */
```
# 引用
在主题配置文件中添加
```yml
inject:
bottom:
+ - # jQuery
+ - # 腾讯位置API
```
在需要展示文本的容器上添加相应id(`welcome-info`)就可以了,例如我想添加在网站公告栏信息的下方,于是就在 `[BlogRoot]\themes\butterfly\layout\includes\widget\card_announcement.pug`的最后一行加上这个,缩进与上一行相同即可
```pug
.announcement_content!= theme.aside.card_announcement.content
//- 添加欢迎访客的信息
+ #welcome-info
```
# 参考内容
{% link Ganzhe的博文,Ganzhe,https://ganzhe2028.github.io/posts/14542 %}