<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>小生博客 - MR.李先森</title>
<link>https://blog.pet111.cn/author/1/</link>
<atom:link href="https://blog.pet111.cn/feed/author/1/" rel="self" type="application/rss+xml" />
<language>zh-CN</language>
<description>MR.李先森</description>
<lastBuildDate>Wed, 29 Apr 2026 13:09:00 +0800</lastBuildDate>
<pubDate>Wed, 29 Apr 2026 13:09:00 +0800</pubDate>
<item>
<title>徒步寻心，赴一场梅河口之约</title>
<link>https://blog.pet111.cn/archives/544/</link>
<guid>https://blog.pet111.cn/archives/544/</guid>
<pubDate>Wed, 29 Apr 2026 13:09:00 +0800</pubDate>
<dc:creator>MR.李先森</dc:creator>
<description><![CDATA[4月22日，没有太多犹豫，收拾好简单的行囊，我便踏上了徒步前往梅河口的旅程。没有明确的时间规划，没有周密的路线安排，只想着一步一步往前走，不问归途，只寻本心。徒步的第一天，一路走走停停，直到傍晚...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>4月22日，没有太多犹豫，收拾好简单的行囊，我便踏上了徒步前往梅河口的旅程。没有明确的时间规划，没有周密的路线安排，只想着一步一步往前走，不问归途，只寻本心。</p><p>徒步的第一天，一路走走停停，直到傍晚才抵达秀水。天色渐暗，来不及过多挑选，我找了一家大车店落脚。说是大车店，其实就是最简陋的住宿地方，房间里没有多余的陈设，阴冷的空气裹着灰尘的味道，夜里冻得人辗转难眠，却也只能硬扛着，毕竟这是自己选择的路。</p><p>天还没亮，凌晨五点半，我便收拾好东西出发了。这一天，我给自己定了目标，要徒步45公里，赶到白旗。一路上，脚下的路越走越沉，汗水浸湿了衣衫，双腿像灌了铅一样，每走一步都要费很大的力气。等到傍晚抵达白旗，我已经筋疲力尽，脱掉鞋子才发现，脚下磨起了密密麻麻的水泡，有的已经破了，钻心地疼，连动一下脚趾都觉得费力。那一刻，有过瞬间的退缩，却还是咬着牙告诉自己，不能放弃。</p><p>第三天，凭着一股韧劲，我终于抵达了吉林市。可天公不作美，抵达的当天就下起了雨，无奈之下，我只好在吉林市住了两晚，也借着这个机会，好好感受了这座城市的气息。闲暇时，我去了吉林北山公园，山间草木葱郁，亭台楼阁错落有致，漫步在山间小路上，连日来的疲惫也消散了不少。隔天去了吉林陨石博物馆看看，感受一下宇宙的神奇。之后又去了玄天岭，听说这里祈福很灵验，我便想着为自己和身边的人求一份心安。一开始，我没有跪下，随意抽了一签，结果不算好，心里难免有些失落。后来，我静下心来，跪下虔诚地许愿、抽签，这一次，抽到了上上签，那一刻，所有的疲惫和委屈都有了慰藉，也默默在心里许下心愿，愿往后顺遂，梦想成真。</p><p>经过三天的徒步，体力已经严重透支，实在没有力气再奔波，只好无奈放弃，心里虽有遗憾，却也懂得了取舍。算下来，这一路徒步，大概走了100公里左右，这100公里，每一步都算数，每一步都藏着坚持与热爱。休息过后，我坐车前往这次旅程的目的地——梅河口市。身为吉林人，这些年却一直没有来过这里，心里难免有些愧疚，也充满了期待。刚踏入这座城市，我就被惊艳到了，城市建设得十分规整，街道干净整洁，没有多余的垃圾，空气也格外清新，走在街头，让人心里格外舒畅。</p><p>在梅河口的日子，我先后参观了当地很火的几个地方，每一处都给我留下了深刻的印象。最先去的是梅河口东北不夜城，这里可是有着两项“国字号”荣誉的网红打卡地，自2021年运营以来，接待了上千万游客。走进不夜城，灯火璀璨，人声鼎沸，各种特色商铺整齐排列，有央视报道的美食，也有东北本地的特色小吃，还有非遗手作、饮品甜品，好吃又不贵。街区里还有各种精彩的演艺，川剧变脸、民族大联欢、高空威亚表演，还有烟花秀点缀夜空，沉浸式的体验，让人仿佛走进了一场热闹的文旅盛宴，不知不觉就沉浸在这份烟火气里。</p><p>紧接着，我去了知北村，这里就像一处世外桃源，黄泥墙、茅屋顶、篱笆院，房檐上挂着金黄的苞米辫，门前拴着红彤彤的辣椒串，一走进村子，就仿佛穿越回了上世纪六七十年代的老东北，满是质朴的关东风情。又有新潮的趣味性，让人舍不得离开。</p><p>之后，我去了梅河口市博物馆，这座成立于2010年的博物馆，收费20元，里面藏着5000件（套）文物，其中国家三级文物就有16件（套），藏品从青铜时期一直延续到明清及近代，涵盖石器、陶器、铜器、铁器等多种类型。博物馆内设三个展区，分别展示古代遗迹、近现代重要史迹和主要出土文物，走进这里，就像翻开了一本厚重的历史书，既能看到辽金大战时期的历史印记，也能了解到梅河口人民艰苦奋斗的革命历程，在感受历史底蕴的同时，也对这座城市多了一份敬畏与了解。</p><p>隔天，我又来到了龙泉寺，这座位于五奎山境内的寺庙，有着悠久的历史，始建于清光绪五年，后来易地重建，如今占地8万平方米，殿宇恢宏，布局严谨。走进寺庙，依次能看到天王殿、观音殿、大雄宝殿，殿内的佛像造型生动、雕刻精致，弥勒菩萨笑容可掬，四大天王形态各异，释迦牟尼坐像庄严肃穆，让人不禁心生敬畏。寺庙后面还有一座59米高的祥云塔，八角九层，登上塔顶，能将五奎山的美景尽收眼底。更难得的是，寺内的楹联匾额都出自赵朴初、沈鹏等著名书法家之手，大雄宝殿的匾额还是真金镶贴，尽显庄重与珍贵，在这里，既能感受到佛教文化的厚重，也能寻得一份心灵的宁静。</p><p>游玩过后，我返回了住宿的银河汇。这一路，最想感谢的就是大哥，从行程安排到食宿照料，他都打理得妥妥当当，还为我破费了不少，这份情谊，我一直记在心里。</p><p>回望这一路，从秀水的简陋大车店，到白旗的筋疲力尽，从吉林市的祈福许愿，到梅河口的惊喜相遇，100多公里的徒步路程，看似是身体的煎熬，实则是心灵的修行。这一路走来，磨其心智，劳其筋骨，饿其体肤，空乏其身，也终于在一路的脚步中，大彻大悟。<br>原来，心里的答案，从来都不在远方，而在每一步前行的脚步里，在每一次坚持的瞬间里。经历过风雨，才懂得坚强的意义；熬过了煎熬，才学会慢慢成长。有些执念，不必言说，不必张扬，藏在心底，守着那份笃定与热爱，一步一步往前走，便是我此生最坚定的坚持。这场徒步，不问归途，只为寻心，而我，也在这场旅程里，遇见了更好的自己。</p><p><style>
.sg-album-grid {
    display: grid;
    grid-gap: 25px;
    margin: 20px 0;
}

@media (min-width: 768px) {
    .sg-album-grid {
        grid-template-columns: repeat(3, 1fr);
    }
}

@media (max-width: 767px) {
    .sg-album-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

.sg-album-card {
    overflow: hidden;
    border-radius: 8px;
    box-shadow: 0 2px 12px rgba(0,0,0,0.08);
    position: relative;
    background-color: #fff;
    transition: transform 0.3s, box-shadow 0.3s;
    display: flex;
    flex-direction: column;
    cursor: pointer;
}

.sg-album-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 10px 20px rgba(0,0,0,0.12);
}

.sg-album-cover-box {
    position: relative;
    aspect-ratio: 4/3;
    overflow: hidden;
    background: #f5f5f5;
}

.sg-album-cover-box img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform 0.5s;
    pointer-events: none;
}

.sg-album-card:hover .sg-album-cover-box img {
    transform: scale(1.05);
}

.sg-lock-icon {
    position: absolute;
    top: 10px;
    right: 10px;
    z-index: 2;
    width: 36px;
    height: 36px;
    background: url(https://www.luohuayu.cn/usr/uploads/SmartGallery/2026/03/q90_1774170978813.webp) no-repeat center center;
    background-size: contain;
    pointer-events: none;
}

.sg-album-cover-title {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 2;
    background: linear-gradient(transparent, rgba(0,0,0,0.8));
    color: #fff;
    padding: 30px 15px 10px;
    font-size: 16px;
    font-weight: bold;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    pointer-events: none;
}

.sg-album-desc-box {
    padding: 12px 15px 15px;
    background: #fff;
}

.sg-album-desc {
    font-size: 13px;
    color: #666;
    line-height: 1.6;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* 弹窗样式 */
.sg-modal {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 10000;
    overflow: hidden;
    background: rgba(0,0,0,0);
    transition: background 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    perspective: 1200px;
}

.sg-modal.sg-active {
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0,0,0,0.85);
}

.sg-modal.sg-closing {
    background: rgba(0,0,0,0);
}

.sg-modal-content {
    width: 88%;
    max-width: 880px;
    max-height: 82vh;
    background: #fff;
    border-radius: 10px;
    display: flex;
    flex-direction: column;
    box-shadow: 0 25px 80px rgba(0,0,0,0.5);
    will-change: transform, opacity;
    transform-style: preserve-3d;
    overflow: hidden;
}

.sg-modal-header {
    color: #333;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 14px 18px;
    background: #fff;
    border-bottom: 1px solid #eee;
    flex-shrink: 0;
    border-radius: 10px 10px 0 0;
}

.sg-modal-header h2 {
    margin: 0;
    font-size: 17px;
}

.sg-close-btn {
    width: 28px;
    height: 28px;
    background: url(https://www.luohuayu.cn/usr/uploads/2026/03/guanbi.png) no-repeat center center;
    background-size: contain;
    cursor: pointer;
    transition: transform 0.2s, opacity 0.2s;
    display: block;
    border: none;
    outline: none;
    background-color: transparent;
    opacity: 0.7;
}

.sg-close-btn:hover {
    transform: rotate(90deg);
    opacity: 1;
}

.sg-body {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 15px;
    scrollbar-width: thin;
    scrollbar-color: #ccc transparent;
    -webkit-overflow-scrolling: touch;
    background: #fff;
    position: relative;
}

.sg-body::-webkit-scrollbar {
    width: 6px;
}

.sg-body::-webkit-scrollbar-thumb {
    background: #ccc;
    border-radius: 3px;
}

.sg-images-grid {
    display: grid;
    grid-gap: 12px;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
}

@media (min-width: 768px) {
    .sg-images-grid {
        grid-template-columns: repeat(3, 1fr);
    }
}

@media (max-width: 767px) {
    .sg-images-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

.sg-images-masonry {
    column-count: 3;
    column-gap: 12px;
}

@media (max-width: 767px) {
    .sg-images-masonry {
        column-count: 2;
    }
}

/* 图片项样式 */
.sg-img-item {
    background: #fff;
    border-radius: 4px;
    overflow: hidden;
    box-shadow: 0 2px 8px rgba(0,0,0,0.05);
    transition: transform 0.3s, box-shadow 0.3s, opacity 0.4s ease;
    position: relative;
    margin-bottom: 12px;
    break-inside: avoid;
    opacity: 0;
    transform: translateY(15px);
}

.sg-img-item.sg-visible {
    opacity: 1;
    transform: translateY(0);
}

.sg-img-item:hover {
    transform: translateY(-2px);
    box-shadow: 0 6px 16px rgba(0,0,0,0.12);
}

.sg-img-item .img-box {
    position: relative;
    overflow: hidden;
    background: #f5f5f5;
}

.sg-images-grid .sg-img-item .img-box {
    aspect-ratio: 1;
}

.sg-img-item img,
.sg-img-item video {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.sg-images-masonry .sg-img-item img,
.sg-images-masonry .sg-img-item video {
    height: auto;
}

.sg-images-masonry .sg-lazy-img {
    min-height: 150px;
    opacity: 0.3;
}

.sg-lazy-img {
    background: #f5f5f5;
    transition: opacity 0.3s ease;
}

.sg-lazy-img.sg-loaded {
    opacity: 1;
}

.sg-lazy-img.sg-loading {
    opacity: 0.3;
}

.sg-lazy-img.sg-error {
    opacity: 0.3;
    filter: grayscale(100%);
}

.sg-img-desc {
    padding: 8px 10px;
    font-size: 12px;
    color: #555;
    line-height: 1.5;
    background: #fafafa;
    border-top: 1px solid #f0f0f0;
}

.sg-lightbox-desc {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    background: rgba(0,0,0,0.85);
    color: #fff;
    padding: 15px 20px;
    text-align: center;
    font-size: 14px;
    line-height: 1.6;
    z-index: 99999;
    display: none;
}

/* 私密相册密码框 */
.sg-password-box {
    text-align: center;
    padding: 40px 20px;
    background: #fafafa;
    border-radius: 8px;
    width: 100%;
}

.sg-password-box h3 {
    margin-bottom: 15px;
    color: #333;
    font-size: 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.sg-pwd-icon {
    width: 24px;
    height: 24px;
    background: url(https://www.luohuayu.cn/usr/uploads/SmartGallery/2026/03/q90_1774170978813.webp) no-repeat center center;
    background-size: contain;
    flex-shrink: 0;
}

.sg-password-box .input-group {
    display: flex;
    justify-content: center;
    gap: 8px;
    flex-wrap: wrap;
}

.sg-password-box input {
    padding: 8px 12px;
    border: 1px solid #ddd;
    border-radius: 4px;
    min-width: 180px;
    font-size: 14px;
    background: #fff;
    color: #333;
}

.sg-password-box button {
    padding: 8px 20px;
    background: #467B96;
    color: #fff;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    font-size: 14px;
}

.sg-password-box .msg {
    color: #e74c3c;
    margin-top: 12px;
    font-size: 13px;
    min-height: 18px;
}

/* 动画效果 */
.sg-modal.sg-effect-slide.sg-active .sg-modal-content {
    animation: sg-slide-up 0.35s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

.sg-modal.sg-effect-slide.sg-closing .sg-modal-content {
    animation: sg-slide-down 0.25s cubic-bezier(0.4, 0, 1, 1) forwards;
}

@keyframes sg-slide-up {
    from { transform: translateY(100%); opacity: 0; }
    to { transform: translateY(0); opacity: 1; }
}

@keyframes sg-slide-down {
    from { transform: translateY(0); opacity: 1; }
    to { transform: translateY(100%); opacity: 0; }
}

.sg-modal.sg-effect-fade.sg-active .sg-modal-content {
    animation: sg-fade-in 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}

.sg-modal.sg-effect-fade.sg-closing .sg-modal-content {
    animation: sg-fade-out 0.2s cubic-bezier(0.4, 0, 1, 1) forwards;
}

@keyframes sg-fade-in {
    from { opacity: 0; transform: scale(0.95); }
    to { opacity: 1; transform: scale(1); }
}

@keyframes sg-fade-out {
    from { opacity: 1; transform: scale(1); }
    to { opacity: 0; transform: scale(0.95); }
}

.sg-modal.sg-effect-rotate.sg-active .sg-modal-content {
    animation: sg-rotate-in 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}

.sg-modal.sg-effect-rotate.sg-closing .sg-modal-content {
    animation: sg-rotate-out 0.25s cubic-bezier(0.4, 0, 1, 1) forwards;
}

@keyframes sg-rotate-in {
    from { opacity: 0; transform: scale(0.5) rotate(-45deg); }
    to { opacity: 1; transform: scale(1) rotate(0); }
}

@keyframes sg-rotate-out {
    from { opacity: 1; transform: scale(1) rotate(0); }
    to { opacity: 0; transform: scale(0.5) rotate(45deg); }
}

.sg-modal.sg-effect-flip .sg-modal-content {
    backface-visibility: hidden;
}

.sg-modal.sg-effect-flip.sg-active .sg-modal-content {
    animation: sg-flip-in 0.45s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}

.sg-modal.sg-effect-flip.sg-closing .sg-modal-content {
    animation: sg-flip-out 0.3s cubic-bezier(0.4, 0, 1, 1) forwards;
}

@keyframes sg-flip-in {
    from { transform: rotateX(-90deg); opacity: 0; }
    to { transform: rotateX(0); opacity: 1; }
}

@keyframes sg-flip-out {
    from { transform: rotateX(0); opacity: 1; }
    to { transform: rotateX(90deg); opacity: 0; }
}

.sg-modal.sg-effect-stack.sg-active .sg-modal-content {
    animation: sg-stack-in 0.35s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}

.sg-modal.sg-effect-stack.sg-closing .sg-modal-content {
    animation: sg-stack-out 0.2s cubic-bezier(0.4, 0, 1, 1) forwards;
}

@keyframes sg-stack-in {
    from { opacity: 0; transform: translateY(50px) scale(0.9); }
    to { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes sg-stack-out {
    from { opacity: 1; transform: translateY(0) scale(1); }
    to { opacity: 0; transform: translateY(-50px) scale(0.9); }
}

.sg-modal.sg-effect-zoom.sg-active .sg-modal-content {
    animation: sg-zoom-in 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}

.sg-modal.sg-effect-zoom.sg-closing .sg-modal-content {
    animation: sg-zoom-out 0.2s cubic-bezier(0.4, 0, 1, 1) forwards;
}

@keyframes sg-zoom-in {
    from { opacity: 0; transform: scale(0.8); }
    to { opacity: 1; transform: scale(1); }
}

@keyframes sg-zoom-out {
    from { opacity: 1; transform: scale(1); }
    to { opacity: 0; transform: scale(0.8); }
}

/* ========== 夜间模式适配 ========== */
@media (prefers-color-scheme: dark) {
    .sg-album-card {
        background-color: transparent;
        box-shadow: 0 2px 12px rgba(0,0,0,0.2);
        border: 1px solid rgba(255,255,255,0.08);
    }
    .sg-album-desc-box {
        background: transparent;
    }
    .sg-album-desc {
        color: rgba(255,255,255,0.7);
    }
    .sg-modal.sg-active {
        background: rgba(0,0,0,0.75);
    }
    .sg-modal-content {
        background: rgba(30,30,30,0.95);
        backdrop-filter: blur(10px);
    }
    .sg-modal-header {
        background: transparent;
        border-bottom-color: rgba(255,255,255,0.1);
    }
    .sg-modal-header h2 {
        color: #fff;
    }
    .sg-close-btn {
        filter: invert(1);
        opacity: 0.6;
    }
    .sg-close-btn:hover {
        opacity: 1;
    }
    .sg-body {
        background: transparent;
    }
    .sg-body::-webkit-scrollbar-thumb {
        background: rgba(255,255,255,0.2);
    }
    .sg-img-item {
        background: transparent;
        border: 1px solid rgba(255,255,255,0.08);
    }
    .sg-img-item .img-box {
        background: rgba(128,128,128,0.1);
    }
    .sg-img-desc {
        background: rgba(0,0,0,0.4);
        border-top-color: rgba(255,255,255,0.08);
        color: rgba(255,255,255,0.8);
    }
    .sg-password-box {
        background: transparent;
    }
    .sg-password-box h3 {
        color: #fff;
    }
    .sg-password-box input {
        background: rgba(255,255,255,0.1);
        border-color: rgba(255,255,255,0.2);
        color: #fff;
    }
    .sg-password-box input::placeholder {
        color: rgba(255,255,255,0.4);
    }
    .sg-password-box .msg {
        color: rgba(255,150,150,0.9);
    }
}

/* class类名夜间模式 */
html.dark .sg-album-card,
body.dark .sg-album-card,
html.night .sg-album-card,
body.night .sg-album-card,
html.dark-mode .sg-album-card,
body.dark-mode .sg-album-card {
    background-color: transparent;
    box-shadow: 0 2px 12px rgba(0,0,0,0.2);
    border: 1px solid rgba(255,255,255,0.08);
}

html.dark .sg-album-desc-box,
body.dark .sg-album-desc-box,
html.night .sg-album-desc-box,
body.night .sg-album-desc-box,
html.dark-mode .sg-album-desc-box,
body.dark-mode .sg-album-desc-box {
    background: transparent;
}

html.dark .sg-album-desc,
body.dark .sg-album-desc,
html.night .sg-album-desc,
body.night .sg-album-desc,
html.dark-mode .sg-album-desc,
body.dark-mode .sg-album-desc {
    color: rgba(255,255,255,0.7);
}

html.dark .sg-modal.sg-active,
body.dark .sg-modal.sg-active,
html.night .sg-modal.sg-active,
body.night .sg-modal.sg-active,
html.dark-mode .sg-modal.sg-active,
body.dark-mode .sg-modal.sg-active {
    background: rgba(0,0,0,0.75);
}

html.dark .sg-modal-content,
body.dark .sg-modal-content,
html.night .sg-modal-content,
body.night .sg-modal-content,
html.dark-mode .sg-modal-content,
body.dark-mode .sg-modal-content {
    background: rgba(30,30,30,0.95);
    backdrop-filter: blur(10px);
}

html.dark .sg-modal-header,
body.dark .sg-modal-header,
html.night .sg-modal-header,
body.night .sg-modal-header,
html.dark-mode .sg-modal-header,
body.dark-mode .sg-modal-header {
    background: transparent;
    border-bottom-color: rgba(255,255,255,0.1);
}

html.dark .sg-modal-header h2,
body.dark .sg-modal-header h2,
html.night .sg-modal-header h2,
body.night .sg-modal-header h2,
html.dark-mode .sg-modal-header h2,
body.dark-mode .sg-modal-header h2 {
    color: #fff;
}

html.dark .sg-close-btn,
body.dark .sg-close-btn,
html.night .sg-close-btn,
body.night .sg-close-btn,
html.dark-mode .sg-close-btn,
body.dark-mode .sg-close-btn {
    filter: invert(1);
    opacity: 0.6;
}

html.dark .sg-close-btn:hover,
body.dark .sg-close-btn:hover,
html.night .sg-close-btn:hover,
body.night .sg-close-btn:hover,
html.dark-mode .sg-close-btn:hover,
body.dark-mode .sg-close-btn:hover {
    opacity: 1;
}

html.dark .sg-body,
body.dark .sg-body,
html.night .sg-body,
body.night .sg-body,
html.dark-mode .sg-body,
body.dark-mode .sg-body {
    background: transparent;
}

html.dark .sg-body::-webkit-scrollbar-thumb,
body.dark .sg-body::-webkit-scrollbar-thumb,
html.night .sg-body::-webkit-scrollbar-thumb,
body.night .sg-body::-webkit-scrollbar-thumb,
html.dark-mode .sg-body::-webkit-scrollbar-thumb,
body.dark-mode .sg-body::-webkit-scrollbar-thumb {
    background: rgba(255,255,255,0.2);
}

html.dark .sg-img-item,
body.dark .sg-img-item,
html.night .sg-img-item,
body.night .sg-img-item,
html.dark-mode .sg-img-item,
body.dark-mode .sg-img-item {
    background: transparent;
    border: 1px solid rgba(255,255,255,0.08);
}

html.dark .sg-img-item .img-box,
body.dark .sg-img-item .img-box,
html.night .sg-img-item .img-box,
body.night .sg-img-item .img-box,
html.dark-mode .sg-img-item .img-box,
body.dark-mode .sg-img-item .img-box {
    background: rgba(128,128,128,0.1);
}

html.dark .sg-img-desc,
body.dark .sg-img-desc,
html.night .sg-img-desc,
body.night .sg-img-desc,
html.dark-mode .sg-img-desc,
body.dark-mode .sg-img-desc {
    background: rgba(0,0,0,0.4);
    border-top-color: rgba(255,255,255,0.08);
    color: rgba(255,255,255,0.8);
}

html.dark .sg-password-box,
body.dark .sg-password-box,
html.night .sg-password-box,
body.night .sg-password-box,
html.dark-mode .sg-password-box,
body.dark-mode .sg-password-box {
    background: transparent;
}

html.dark .sg-password-box h3,
body.dark .sg-password-box h3,
html.night .sg-password-box h3,
body.night .sg-password-box h3,
html.dark-mode .sg-password-box h3,
body.dark-mode .sg-password-box h3 {
    color: #fff;
}

html.dark .sg-password-box input,
body.dark .sg-password-box input,
html.night .sg-password-box input,
body.night .sg-password-box input,
html.dark-mode .sg-password-box input,
body.dark-mode .sg-password-box input {
    background: rgba(255,255,255,0.1);
    border-color: rgba(255,255,255,0.2);
    color: #fff;
}

html.dark .sg-password-box input::placeholder,
body.dark .sg-password-box input::placeholder,
html.night .sg-password-box input::placeholder,
body.night .sg-password-box input::placeholder,
html.dark-mode .sg-password-box input::placeholder,
body.dark-mode .sg-password-box input::placeholder {
    color: rgba(255,255,255,0.4);
}

html.dark .sg-password-box .msg,
body.dark .sg-password-box .msg,
html.night .sg-password-box .msg,
body.night .sg-password-box .msg,
html.dark-mode .sg-password-box .msg,
body.dark-mode .sg-password-box .msg {
    color: rgba(255,150,150,0.9);
}
</style><div class="sg-album-grid" id="sg-album-list"><div class="sg-album-card" onclick="sgOpenModal(3)" data-album-id="3">
    <div class="sg-album-cover-box">
        <img src="https://blog.pet111.cn/usr/uploads/2026/04/1681172462.jpg" alt="徒步寻心，赴一场梅河口之约">
        
        <div class="sg-album-cover-title">徒步寻心，赴一场梅河口之约</div>
    </div>
    <div class="sg-album-desc-box">
        <div class="sg-album-desc">记录徒步沿途的风景</div>
    </div>
</div><div id="sg-album-3" class="sg-modal" data-layout="grid" data-private="0">
    <div class="sg-modal-content">
        <div class="sg-modal-header">
            <h2>徒步寻心，赴一场梅河口之约</h2>
            <button class="sg-close-btn" onclick="sgCloseModal(3, event)"></button>
        </div>
        <div class="sg-body" id="sg-body-3" data-layout="grid" data-loaded="0" data-lazy="1" data-placeholder=""></div>
    </div>
</div></div><div class="sg-lightbox-desc" id="sg-lightbox-desc"></div><script>
(function() {
    'use strict';
    
    var SG_CONFIG = {
        indexUrl: "https://blog.pet111.cn",
        siteUrl: "https://blog.pet111.cn/",
        openEffect: "slide",
        lazyLoad: "1",
        lazyThreshold: 100,
        lazyPlaceholder: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0IDMiPjxyZWN0IGZpbGw9IiNkZGQiIHdpZHRoPSI0IiBoZWlnaHQ9IjMiLz48L3N2Zz4=",
        renderBatchSize: 15,
        loadBatchSize: 3
    };
    
    var SG_STATE = {
        currentAlbumId: 0,
        closingTimeout: null,
        lazyObserver: null,
        visibilityObserver: null,
        lightboxListener: false,
        loadQueue: [],
        isProcessingQueue: false,
        eventListeners: {},
        isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
    };
    
    function isExternalUrl(url) {
        if (!url || typeof url !== 'string') return false;
        url = url.trim();
        if (url.indexOf('http://') === 0 || url.indexOf('https://') === 0) return true;
        if (/^https?:\/\/[^\/]+\/api\//i.test(url)) return true;
        return false;
    }
    
    function getImageUrl(filename) {
        return isExternalUrl(filename) ? filename : SG_CONFIG.siteUrl + "usr/uploads/" + filename;
    }
    
    function processLoadQueue() {
        if (SG_STATE.isProcessingQueue || SG_STATE.loadQueue.length === 0) return;
        SG_STATE.isProcessingQueue = true;
        var batch = SG_STATE.loadQueue.splice(0, SG_CONFIG.loadBatchSize);
        batch.forEach(function(item, index) {
            setTimeout(function() { loadImage(item.element, item.src); }, index * 30);
        });
        setTimeout(function() {
            SG_STATE.isProcessingQueue = false;
            if (SG_STATE.loadQueue.length > 0) processLoadQueue();
        }, batch.length * 30 + 30);
    }
    
    function loadImage(img, src) {
        if (!img || img.classList.contains('sg-loaded') || img.classList.contains('sg-loading')) return;
        img.classList.add('sg-loading');
        var tempImg = new Image();
        tempImg.onload = function() {
            img.src = src;
            img.classList.remove('sg-loading');
            img.classList.add('sg-loaded');
            tempImg = null;
        };
        tempImg.onerror = function() {
            img.classList.remove('sg-loading');
            img.classList.add('sg-error');
            tempImg = null;
        };
        tempImg.src = src;
    }
    
    function initLazyLoad(body) {
        var container = body || document;
        var lazyImages = container.querySelectorAll('.sg-lazy-img[data-src]:not(.sg-loaded):not(.sg-loading)');
        if (lazyImages.length === 0) return;
        if (SG_STATE.lazyObserver) SG_STATE.lazyObserver.disconnect();
        if ('IntersectionObserver' in window) {
            SG_STATE.lazyObserver = new IntersectionObserver(function(entries) {
                entries.forEach(function(entry) {
                    if (entry.isIntersecting) {
                        var img = entry.target;
                        var src = img.getAttribute('data-src');
                        if (src) {
                            SG_STATE.loadQueue.push({ element: img, src: src });
                            img.removeAttribute('data-src');
                        }
                        SG_STATE.lazyObserver.unobserve(img);
                    }
                });
                processLoadQueue();
            }, { rootMargin: SG_CONFIG.lazyThreshold + 'px 0px', threshold: 0 });
            lazyImages.forEach(function(img) { SG_STATE.lazyObserver.observe(img); });
        } else {
            Array.from(lazyImages).forEach(function(img) {
                var src = img.getAttribute('data-src');
                if (src) loadImage(img, src);
            });
        }
    }
    
    function initVisibilityObserver(body) {
        var items = body.querySelectorAll('.sg-img-item:not(.sg-visible)');
        if (items.length === 0) return;
        if (SG_STATE.visibilityObserver) SG_STATE.visibilityObserver.disconnect();
        if ('IntersectionObserver' in window) {
            SG_STATE.visibilityObserver = new IntersectionObserver(function(entries) {
                entries.forEach(function(entry) {
                    if (entry.isIntersecting) {
                        entry.target.classList.add('sg-visible');
                        SG_STATE.visibilityObserver.unobserve(entry.target);
                    }
                });
            }, { rootMargin: '50px 0px', threshold: 0 });
            items.forEach(function(item) { SG_STATE.visibilityObserver.observe(item); });
        } else {
            items.forEach(function(item) { item.classList.add('sg-visible'); });
        }
    }
    
    function openModal(id) {
        SG_STATE.currentAlbumId = id;
        var modal = document.getElementById('sg-album-' + id);
        if (!modal) return;
        
        if (SG_STATE.closingTimeout) {
            clearTimeout(SG_STATE.closingTimeout);
            SG_STATE.closingTimeout = null;
        }
        
        modal.classList.remove('sg-active', 'sg-closing');
        modal.classList.remove('sg-effect-slide', 'sg-effect-fade', 'sg-effect-rotate', 'sg-effect-flip', 'sg-effect-stack', 'sg-effect-zoom');
        modal.classList.add('sg-effect-' + SG_CONFIG.openEffect);
        void modal.offsetWidth;
        modal.classList.add('sg-active');
        document.body.style.overflow = 'hidden';
        
        var body = document.getElementById('sg-body-' + id);
        if (!body) return;
        
        var isPrivate = modal.getAttribute('data-private') === '1';
        if (isPrivate) {
            var unlocked = sessionStorage.getItem('sg_unlocked_' + id);
            if (!unlocked) {
                showPasswordBox(id, body);
                return;
            }
        }
        
        var isLoaded = body.getAttribute('data-loaded') === '1';
        if (!isLoaded) {
            body.innerHTML = '<div style="text-align:center;padding:40px;color:#999;"><span style="display:inline-block;width:20px;height:20px;border:2px solid #ddd;border-top-color:#467B96;border-radius:50%;animation:sg-spin 0.8s linear infinite;margin-right:8px;vertical-align:middle;"></span>加载中...</div><style>@keyframes sg-spin{to{transform:rotate(360deg);}}</style>';
            setTimeout(function() { loadImages(id); }, 300);
        } else {
            requestAnimationFrame(function() {
                initLazyLoad(body);
                initVisibilityObserver(body);
                initLightbox(id);
            });
        }
    }
    
    function showPasswordBox(albumId, body) {
        body.innerHTML = '<div class="sg-password-box">' +
            '<h3><div class="sg-pwd-icon"></div>此相册已加密</h3>' +
            '<div class="input-group">' +
            '<input type="password" id="sg-pwd-input-' + albumId + '" placeholder="请输入访问密码" onkeypress="if(event.key===\'Enter\') sgCheckPwd(' + albumId + ')">' +
            '<button onclick="sgCheckPwd(' + albumId + ')">解锁</button>' +
            '</div>' +
            '<div class="msg" id="sg-pwd-msg-' + albumId + '"></div>' +
            '</div>';
        setTimeout(function() {
            var input = document.getElementById('sg-pwd-input-' + albumId);
            if (input) input.focus();
        }, 100);
    }
    
    window.sgCheckPwd = function(albumId) {
        var pwdInput = document.getElementById('sg-pwd-input-' + albumId);
        var msgEl = document.getElementById('sg-pwd-msg-' + albumId);
        var password = pwdInput ? pwdInput.value : '';
        if (!password) { msgEl.innerText = '请输入密码'; return; }
        msgEl.innerText = '验证中...';
        fetch(SG_CONFIG.indexUrl + '/action/smart-gallery?do=check-pwd', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ album_id: albumId, password: password })
        }).then(function(res) { return res.json(); }).then(function(data) {
            if (data.status === 'success') {
                sessionStorage.setItem('sg_unlocked_' + albumId, '1');
                msgEl.innerText = '解锁成功';
                var body = document.getElementById('sg-body-' + albumId);
                body.setAttribute('data-loaded', '0');
                body.innerHTML = '<div style="text-align:center;padding:40px;color:#999;"><span style="display:inline-block;width:20px;height:20px;border:2px solid #ddd;border-top-color:#467B96;border-radius:50%;animation:sg-spin 0.8s linear infinite;margin-right:8px;vertical-align:middle;"></span>加载中...</div><style>@keyframes sg-spin{to{transform:rotate(360deg);}}</style>';
                setTimeout(function() { loadImages(albumId); }, 300);
            } else {
                msgEl.innerText = '密码错误，请重试';
                pwdInput.value = '';
                pwdInput.focus();
            }
        }).catch(function() { msgEl.innerText = '验证失败，请稍后重试'; });
    };
    
    function closeModal(id, event) {
        if (event) { event.stopPropagation(); event.preventDefault(); }
        var modal = document.getElementById('sg-album-' + id);
        if (!modal || !modal.classList.contains('sg-active')) return;
        modal.classList.remove('sg-active');
        modal.classList.add('sg-closing');
        closeLightbox();
        SG_STATE.loadQueue = [];
        SG_STATE.isProcessingQueue = false;
        if (SG_STATE.lazyObserver) SG_STATE.lazyObserver.disconnect();
        if (SG_STATE.visibilityObserver) SG_STATE.visibilityObserver.disconnect();
        cleanupEventListeners(id);
        var body = document.getElementById('sg-body-' + id);
        if (body) {
            setTimeout(function() {
                body.innerHTML = '';
                body.setAttribute('data-loaded', '0');
            }, 100);
        }
        SG_STATE.closingTimeout = setTimeout(function() {
            modal.classList.remove('sg-closing');
            modal.classList.remove('sg-effect-' + SG_CONFIG.openEffect);
            document.body.style.overflow = '';
            SG_STATE.closingTimeout = null;
        }, 250);
    }
    
    function cleanupEventListeners(albumId) {
        var key = 'lightbox_' + albumId;
        if (SG_STATE.eventListeners[key]) {
            SG_STATE.eventListeners[key].forEach(function(listener) {
                listener.element.removeEventListener('click', listener.handler);
            });
            delete SG_STATE.eventListeners[key];
        }
    }
    
    function loadImages(id) {
        var body = document.getElementById('sg-body-' + id);
        if (!body) return;
        var layout = body.getAttribute('data-layout') || 'grid';
        var lazyLoad = body.getAttribute('data-lazy') || '0';
        var customPlaceholder = body.getAttribute('data-placeholder') || '';
        var placeholder = customPlaceholder || SG_CONFIG.lazyPlaceholder;
        
        var xhr = new XMLHttpRequest();
        xhr.open('GET', SG_CONFIG.indexUrl + '/action/smart-gallery?do=fetch-images&album_id=' + id, true);
        xhr.onload = function() {
            try {
                var images = JSON.parse(xhr.responseText);
                var layoutClass = (layout === 'masonry') ? 'sg-images-masonry' : 'sg-images-grid';
                if (images.length === 0) {
                    body.innerHTML = '<div style="text-align:center;color:#999;padding:40px;">暂无图片</div>';
                    body.setAttribute('data-loaded', '1');
                    return;
                }
                var container = document.createElement('div');
                container.className = layoutClass;
                container.id = 'sg-grid-' + id;
                body.innerHTML = '';
                body.appendChild(container);
                var batchSize = SG_STATE.isMobile ? 10 : SG_CONFIG.renderBatchSize;
                var currentIndex = 0;
                
                function renderBatch() {
                    var fragment = document.createDocumentFragment();
                    var end = Math.min(currentIndex + batchSize, images.length);
                    for (var i = currentIndex; i < end; i++) {
                        var img = images[i];
                        var url = getImageUrl(img.filename);
                        var desc = img.description || '';
                        var item = document.createElement('div');
                        item.className = 'sg-img-item';
                        var itemHtml = '';
                        if (img.type === 'video') {
                            itemHtml = '<div class="img-box"><video src="' + url + '" controls preload="metadata"></video></div>';
                            if (desc) itemHtml += '<div class="sg-img-desc">' + desc + '</div>';
                        } else {
                            var imgTag = (lazyLoad === '1') ? '<img class="sg-lazy-img" src="' + placeholder + '" data-src="' + url + '">' : '<img src="' + url + '">';
                            itemHtml = '<div class="img-box"><a href="https://blog.pet111.cn/go/JyArIHVybCArICc" data-fancybox="gallery-' + id + '" data-caption="' + desc + '">' + imgTag + '</a></div>';
                            if (desc) itemHtml += '<div class="sg-img-desc">' + desc + '</div>';
                        }
                        item.innerHTML = itemHtml;
                        fragment.appendChild(item);
                    }
                    container.appendChild(fragment);
                    currentIndex = end;
                    if (currentIndex < images.length) {
                        requestAnimationFrame(renderBatch);
                    } else {
                        body.setAttribute('data-loaded', '1');
                        requestAnimationFrame(function() {
                            initVisibilityObserver(body);
                            if (lazyLoad === '1') initLazyLoad(body);
                            initLightbox(id);
                        });
                    }
                }
                renderBatch();
            } catch (e) {
                body.innerHTML = '<p style="text-align:center;color:#999;padding:40px;">加载失败</p>';
            }
        };
        xhr.send();
    }
    
    function initLightbox(albumId) {
        var body = document.getElementById('sg-body-' + albumId);
        if (!body) return;
        var links = body.querySelectorAll('a[data-fancybox]');
        var listeners = [];
        links.forEach(function(link) {
            var handler = function(e) { handleLightboxClick(e, albumId); };
            link.addEventListener('click', handler);
            listeners.push({ element: link, handler: handler });
        });
        SG_STATE.eventListeners['lightbox_' + albumId] = listeners;
    }
    
    function handleLightboxClick(event, albumId) {
        event.preventDefault();
        var link = event.currentTarget;
        var href = link.getAttribute('href');
        var caption = link.getAttribute('data-caption') || '';
        var body = document.getElementById('sg-body-' + albumId);
        var links = body.querySelectorAll('a[data-fancybox]');
        var index = 0;
        links.forEach(function(l, i) { if (l === link) index = i; });
        createLightbox(href, caption, links, index);
    }
    
    function createLightbox(src, caption, links, index) {
        closeLightbox();
        var lightbox = document.createElement('div');
        lightbox.id = 'sg-custom-lightbox';
        lightbox.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.92);z-index:99998;display:flex;align-items:center;justify-content:center;';
        lightbox.innerHTML = '<button onclick="sgCloseLightbox()" style="position:absolute;top:20px;right:20px;width:40px;height:40px;background:rgba(255,255,255,0.1);border:none;border-radius:50%;cursor:pointer;color:#fff;font-size:24px;z-index:99999;">×</button>' +
            '<button onclick="sgPrevImg()" style="position:absolute;left:20px;top:50%;transform:translateY(-50%);width:50px;height:50px;background:rgba(255,255,255,0.1);border:none;border-radius:50%;cursor:pointer;color:#fff;font-size:20px;z-index:99999;">‹</button>' +
            '<button onclick="sgNextImg()" style="position:absolute;right:20px;top:50%;transform:translateY(-50%);width:50px;height:50px;background:rgba(255,255,255,0.1);border:none;border-radius:50%;cursor:pointer;color:#fff;font-size:20px;z-index:99999;">›</button>' +
            '<img id="sg-lightbox-img" src="' + src + '" style="max-width:90%;max-height:80vh;object-fit:contain;">';
        document.body.appendChild(lightbox);
        lightbox.dataset.index = index;
        lightbox.dataset.links = JSON.stringify(Array.from(links).map(function(l) {
            return { src: l.getAttribute('href'), caption: l.getAttribute('data-caption') || '' };
        }));
        showLightboxDesc(caption);
        lightbox.addEventListener('click', function(e) { if (e.target === lightbox) closeLightbox(); });
        if (!SG_STATE.lightboxListener) {
            document.addEventListener('keydown', handleKeydown);
            SG_STATE.lightboxListener = true;
        }
    }
    
    function closeLightbox() {
        var lightbox = document.getElementById('sg-custom-lightbox');
        if (lightbox) lightbox.remove();
        var desc = document.getElementById('sg-lightbox-desc');
        if (desc) desc.style.display = 'none';
    }
    
    function prevImg() {
        var lightbox = document.getElementById('sg-custom-lightbox');
        if (!lightbox) return;
        var links = JSON.parse(lightbox.dataset.links);
        var index = parseInt(lightbox.dataset.index);
        index = (index - 1 + links.length) % links.length;
        updateLightboxImage(links[index], index);
    }
    
    function nextImg() {
        var lightbox = document.getElementById('sg-custom-lightbox');
        if (!lightbox) return;
        var links = JSON.parse(lightbox.dataset.links);
        var index = parseInt(lightbox.dataset.index);
        index = (index + 1) % links.length;
        updateLightboxImage(links[index], index);
    }
    
    function updateLightboxImage(linkData, index) {
        var lightbox = document.getElementById('sg-custom-lightbox');
        if (!lightbox) return;
        document.getElementById('sg-lightbox-img').src = linkData.src;
        lightbox.dataset.index = index;
        showLightboxDesc(linkData.caption);
    }
    
    function showLightboxDesc(caption) {
        var desc = document.getElementById('sg-lightbox-desc');
        if (caption) { desc.innerText = caption; desc.style.display = 'block'; }
        else { desc.style.display = 'none'; }
    }
    
    function handleKeydown(event) {
        if (event.key === 'Escape') {
            closeLightbox();
            document.querySelectorAll('.sg-modal.sg-active').forEach(function(m) {
                var id = m.id.replace('sg-album-', '');
                closeModal(id, event);
            });
        } else if (document.getElementById('sg-custom-lightbox')) {
            if (event.key === 'ArrowLeft') prevImg();
            else if (event.key === 'ArrowRight') nextImg();
        }
    }
    
    window.sgOpenModal = openModal;
    window.sgCloseModal = closeModal;
    window.sgCloseLightbox = closeLightbox;
    window.sgPrevImg = prevImg;
    window.sgNextImg = nextImg;
    
    document.addEventListener('click', function(e) {
        if (e.target.classList.contains('sg-modal')) {
            var id = e.target.id.replace('sg-album-', '');
            closeModal(id, e);
        }
    });
})();
</script></p>
]]></content:encoded>
<slash:comments>3</slash:comments>
<comments>https://blog.pet111.cn/archives/544/#comments</comments>
<wfw:commentRss>https://blog.pet111.cn/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>放下执念，好好善待自己</title>
<link>https://blog.pet111.cn/archives/542/</link>
<guid>https://blog.pet111.cn/archives/542/</guid>
<pubDate>Mon, 20 Apr 2026 12:40:00 +0800</pubDate>
<dc:creator>MR.李先森</dc:creator>
<description><![CDATA[这些天，被一段情绪困住，把自己折腾得面目全非。茶不思，饭不想，日夜纠结内耗，短短几日，竟消瘦了十多斤。长久地沉沦颓废，浑浑噩噩，如今终于清醒。我渐渐明白，就算把自己熬到憔悴、饿到疲惫，甚至耗尽所...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>这些天，被一段情绪困住，把自己折腾得面目全非。</p><p>茶不思，饭不想，日夜纠结内耗，短短几日，竟消瘦了十多斤。</p><p>长久地沉沦颓废，浑浑噩噩，如今终于清醒。</p><p>我渐渐明白，就算把自己熬到憔悴、饿到疲惫，甚至耗尽所有，到头来也终究是无言的结局，不会有任何改变。</p><p>执念困住的从来只有自己，伤人的也从来不是别人，是不肯放过自己的心。</p><p>如今想开了，看透了，也就释然了。</p><p>往后，该站起身，好好生活，好好爱自己。</p>
]]></content:encoded>
<slash:comments>2</slash:comments>
<comments>https://blog.pet111.cn/archives/542/#comments</comments>
<wfw:commentRss>https://blog.pet111.cn/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>混沌</title>
<link>https://blog.pet111.cn/archives/541/</link>
<guid>https://blog.pet111.cn/archives/541/</guid>
<pubDate>Thu, 16 Apr 2026 08:31:00 +0800</pubDate>
<dc:creator>MR.李先森</dc:creator>
<description><![CDATA[窗外的雨，是天地揉碎的愁绪，淅淅沥沥，敲打着窗棂，也敲打着面前这碗温热的馄饨。雾气氤氲而上，模糊了视线，也模糊了桌对面你的轮廓——就像我们这九年有余的时光，热烈过、清晰过，最终还是慢慢浸染上了混...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>窗外的雨，是天地揉碎的愁绪，淅淅沥沥，敲打着窗棂，也敲打着面前这碗温热的馄饨。雾气氤氲而上，模糊了视线，也模糊了桌对面你的轮廓——就像我们这九年有余的时光，热烈过、清晰过，最终还是慢慢浸染上了混沌的底色，分不清是不舍，是遗憾，还是藏在心底未说出口的眷恋。</p><p>九载光阴，说长不长，不过是三千多个日夜的朝夕相伴；说短不短，足以装下我们所有的模样。还记得初识时的拘谨与欢喜，一句简单的问候，一个腼腆的笑容，便成了缘分的开端。那些并肩走过的日子，有肆无忌惮的欢声笑语，是深夜街头的并肩漫步，是分享心事时的促膝长谈，是哪怕沉默不语也不会觉得尴尬的默契；有针锋相对的争吵拌嘴，为了一句无关紧要的话争得面红耳赤，为了彼此的倔强冷战许久，却又在转身的瞬间，忍不住回头牵住对方的手；也有撕心裂肺的悲伤时刻，一起熬过迷茫的低谷，一起承受突如其来的遗憾，那些掉落在时光里的眼泪，早已悄悄融进了彼此的生命里。</p><p>我们总以为，这样的日子会一直延续下去，以为并肩走过了风雨，就能够抵得过所有的世事变迁。却忘了，生活从来都不是一成不变的，它像一场无形的洪流，推着我们往前走，也推着我们走向不同的方向。那些曾经的约定，那些并肩的期许，终究抵不过距离的阻隔，抵不过生活的取舍。于是，我们不得不站在分叉路口，笑着说再见，却在转身的瞬间，红了眼眶。</p><p>我舀起一勺馄饨，温热的汤汁滑进喉咙，却尝不出半分鲜香，只剩满口的苦涩，难以下咽。就像我们这九年的情谊，明明盛满了温暖与欢喜，到了离别这一刻，却只剩下无尽的酸涩。雨还在下，眼泪顺着脸颊滑落，滴进碗里，与汤汁交融，分不清哪是雨，哪是泪，就像此刻的心情，混沌不堪，分不清是舍不得，是不甘心，还是真心祝愿。</p><p>这碗馄饨，是离别时最后的温存，也是我们九年情谊的见证。它混沌的模样，像极了我们过往的时光——有清晰的欢喜，有模糊的遗憾，有明确的牵挂，也有迷茫的不舍。我们经历了所有该经历的，欢笑过、争吵过、悲伤过、珍惜过，便也无憾了。</p><p>天下没有不散的筵席，离别从来都不是结束，而是另一种开始。往后的日子，我们将奔赴各自的山海，踏上不同的征程，或许再也不会有朝夕相伴的时光，或许再也不会有并肩畅谈的默契，但那些刻在时光里的回忆，那些彼此陪伴的温暖，会永远留在心底，成为我们前行路上最坚实的力量。</p><p>雨还未停，混沌依旧，这碗馄饨终究还是没能吃完，就像我们的离别，终究还是带着几分遗憾。但我依旧满心期许，期许你往后的日子，少一些悲伤，多一些欢喜；少一些迷茫，多一些坚定。愿你遍历山河，依旧觉得人间值得；愿你往后余生，平安喜乐，得偿所愿，被世界温柔以待。</p><p>混沌的是时光，是离别，是此刻的心情；清晰的，是九年的情谊，是心底的牵挂，是对你不变的祝福。愿我们，纵使山水相隔，纵使岁月变迁，想起彼此的时候，依旧能眉眼带笑，依旧能感受到那份跨越山海的温暖。</p><p><img src="/usr/uploads/2026/04/1830441482.jpg" alt="IMG_5757.jpg" title="IMG_5757.jpg"></p>
]]></content:encoded>
<slash:comments>5</slash:comments>
<comments>https://blog.pet111.cn/archives/541/#comments</comments>
<wfw:commentRss>https://blog.pet111.cn/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>街道党支部会议纪实：更名不改初心</title>
<link>https://blog.pet111.cn/archives/539/</link>
<guid>https://blog.pet111.cn/archives/539/</guid>
<pubDate>Wed, 04 Mar 2026 16:18:00 +0800</pubDate>
<dc:creator>MR.李先森</dc:creator>
<description><![CDATA[前些日子，接到党支部街道书记的电话，通知回去开党代会。时间过得很快，约定好的日子一到，早上八点半我便准时抵达。刚准备进门，恰巧碰到了镇长，被他热情地请到办公室聊了一会儿。眼看会议时间将近，我便走...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>前些日子，接到党支部街道书记的电话，通知回去开党代会。时间过得很快，约定好的日子一到，早上八点半我便准时抵达。</p><p>刚准备进门，恰巧碰到了镇长，被他热情地请到办公室聊了一会儿。眼看会议时间将近，我便走进会议室。一进门便感受到气氛格外严肃，我找到自己的位置坐下，刚落座，工作人员便提醒我签到，随后大家的手机都统一封存起来。</p><p>到这时我才恍然，这次会议应当与街道书记换届选举有关。之前我们的街道叫作昌盛，如今更名为锦程，新名字，也寓意着新的开始。</p><p>不多一时，会议正式开始。工作人员为我们发放了选票，本次是 6 选 5，需要从五位中选出，书记、副书记、会计等。大家认真填好选票，监票人、唱票人有条不紊地统计票数。短暂休息后，大会公布了选举结果：不出意外，上一任的邱书记继续担任街道书记，只是副书记有所调整。</p><p>邱书记上台发表致辞，言语恳切、思路清晰，讲得十分精彩。他寄语街道，要像新名字一样，踏上锦绣前程。</p><p>一场会议，一次换届，一份责任。从昌盛到锦程，变的是名字，不变的是为居民服务的初心。愿在邱书记的带领下，我们锦程街道不负其名、不负所盼，未来一路繁花，前程似锦，邻里和睦，万事兴旺。</p><p><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/03/04/1772612058.jpg" alt="选举 (2).JPG" title="选举 (2).JPG"><br><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/03/04/1772612044.jpg" alt="选举 (3).JPG" title="选举 (3).JPG"><br><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/03/04/1772612052.jpg" alt="选举 (1).JPG" title="选举 (1).JPG"></p>
]]></content:encoded>
<slash:comments>1</slash:comments>
<comments>https://blog.pet111.cn/archives/539/#comments</comments>
<wfw:commentRss>https://blog.pet111.cn/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>正月十五雪打灯，肩头有你便是春</title>
<link>https://blog.pet111.cn/archives/535/</link>
<guid>https://blog.pet111.cn/archives/535/</guid>
<pubDate>Wed, 04 Mar 2026 15:55:00 +0800</pubDate>
<dc:creator>MR.李先森</dc:creator>
<description><![CDATA[正月十五，一家人围坐在一起欢度元宵佳节。饭后，我带着孩子去公园转了一圈。今天的天气不算好，下了好大的雪，这也是我多年来未曾见过的景象，真应了那句老话 “正月十五雪打灯”。瑞雪映着灯火，本是吉兆，...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>正月十五，一家人围坐在一起欢度元宵佳节。饭后，我带着孩子去公园转了一圈。今天的天气不算好，下了好大的雪，这也是我多年来未曾见过的景象，真应了那句老话 “正月十五雪打灯”。瑞雪映着灯火，本是吉兆，只是天寒路滑，路上的行人比往年少了大半，也不知大家都躲到哪里去了。</p><p>在公园往回走到一半时，他不想走了，嚷嚷着累。我便扛起他，让他骑在我的肩头，继续前行。又走了一段，路边一位大叔笑着搭话：“这是你家孩子？” 我答道：“对。” 他又感慨：“哎，真好。孩子的欢声笑语就那么几年，我真遗憾，我的孩子小时候，我从没这样背过、扛过。”那一刻，我忽然懂了什么是天伦之乐。</p><p>到了家门口，孩子又吵着要放烟花。我便又去买了些，陪他在雪地里点燃。看着他围着烟花跑跳，笑得眼睛眯成一条缝，我心里满是暖意。本以为玩够了该回家，怎奈精力旺盛，还想接着玩。我灵机一动，把他放进小车上，拉着他在小区里又转了好多圈。<br>雪花还在飘，灯火依旧亮，他的笑声在雪夜里传得很远。看着他开心的模样，我…… 甚是欣慰。</p><blockquote>儿啊，我的小男子汉。今天这场 “正月十五雪打灯” 的瑞雪，是老天送给我们的元宵礼物。爸爸记下了雪地里你骑在我肩头的重量，记下了你看见烟花时的欢呼，也记下了那位大叔的遗憾。<br>爸爸不求你未来多么出众，只愿你永远保有这份纯粹的快乐。成长这条路很长，爸爸会像今天这样，做你暂时的依靠，也做你永远的后盾。当你累了，我的肩头永远为你留着；当你想飞，我便放手让你去闯。<br>愿你眼里有光，心中有爱，脚下有路；愿你历经风雪，依然能笑着迎接每一个春天。无论你长到多大，在爸爸这里，你永远是那个需要我扛在肩头、陪你放烟花的小男孩。爸爸爱你，不止今夕，更在朝朝暮暮。</blockquote><p><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/03/04/1772610845.jpg" alt="2023.3.3 (5).JPG" title="2023.3.3 (5).JPG"><br><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/03/04/1772610859.jpg" alt="2023.3.3 (2).JPG" title="2023.3.3 (2).JPG"><br><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/03/04/1772610863.jpg" alt="2023.3.3 (3).JPG" title="2023.3.3 (3).JPG"><br><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/03/04/1772610868.jpg" alt="2023.3.3 (4).JPG" title="2023.3.3 (4).JPG"><br><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/03/04/1772610855.jpg" alt="2023.3.3 (1).JPG" title="2023.3.3 (1).JPG"></p>
]]></content:encoded>
<slash:comments>9</slash:comments>
<comments>https://blog.pet111.cn/archives/535/#comments</comments>
<wfw:commentRss>https://blog.pet111.cn/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>总结2026我的春节碎碎念</title>
<link>https://blog.pet111.cn/archives/521/</link>
<guid>https://blog.pet111.cn/archives/521/</guid>
<pubDate>Sun, 22 Feb 2026 18:25:00 +0800</pubDate>
<dc:creator>MR.李先森</dc:creator>
<description><![CDATA[这篇博文其实早在春节就该发了，本来想着春节前后还有不少琐事要发生，就想着等忙完这一阵，把所有细碎的日常整合到一起，好好跟大家唠唠我这个不算热闹，但满是心意的春节。腊月二十八，我早早地就把家里的卫...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>这篇博文其实早在春节就该发了，本来想着春节前后还有不少琐事要发生，就想着等忙完这一阵，把所有细碎的日常整合到一起，好好跟大家唠唠我这个不算热闹，但满是心意的春节。</p><p><strong>腊月二十八</strong>，我早早地就把家里的卫生彻底打扫干净，又贴好了新春条幅。平时我家屋子装修得比较素净，没什么多余的装饰，这么简单一布置，瞬间就有了新春的氛围感，红的条幅衬着素净的屋子，别有一番滋味，一眼望去，全是过年的烟火气。</p><p><strong>腊月二十九</strong>就是除夕了，天还没亮，窗外就传来了鞭炮的轰隆声，年味一下子就拉满了。我也起得格外早，因为要回农村接爸妈来街里过年。今年有点特别，老婆孩子都回娘家过年了，想着让他们好好陪陪岳父岳母，我也特别理解，毕竟一家人相互体谅才好。借着这份年味，我也悄悄许下了新一年的心愿——努力攒钱买套房子，早点把岳父岳母接到身边来，让他们不用再奔波，也能多陪陪我们。</p><p>接回爸妈返程后，今天我主动掌厨，做了12个菜，每一道都是家里人爱吃的，主打一个合心意。更巧的是，今天还是妈妈的生日，我提前准备了一束鲜花，给妈妈一个小惊喜；还给爸爸买了一部新手机，他那部旧手机都用了好几年，按键都不灵敏了，却一直舍不得换，我提前买好，他嘴上说着浪费，心里其实特别开心。</p><p><strong>大年初一</strong>，没什么特别的安排，吃过早饭，我先把爸爸送回了农村，妈妈留在楼上，等着我爱人回来后，一家人再一起回去。送完爸爸回来，天色已经有些暗了，一个人待在工作室里喝茶，越喝越无聊，索性买了一张贺岁片《飞驰人生》的电影票，一个人去看了场电影，也算给平淡的一天添点乐趣。</p><p><strong>大年初二</strong>，我本身朋友就不多，这么多年也习惯了独处。不出意外，这天还是和往常一样，早早来到工作室喝茶，忙完手头一点小事，回到家自己小酌了一杯，没有热闹，却也自在。</p><p><strong>大年初三</strong>，本来我计划着初五回黑龙江接爱人，结果大舅哥打电话催我早点回去，想想早一天晚一天都一样，就收拾好礼品，当天就启程了。这天走高速，路上的车不多，一路顺畅就到了地方。给妻子的舅舅、姨父送完礼品，本来我们几个小辈打算一起出去吃顿饭，结果半路杀出个“程咬金”一个是我与妻子在一起10多年都不认识的人，听说是爱人那边的远房舅舅，一见面就浑身酒气，舌头都捋不直，非要跟着我们一起吃饭，大家碍于情面，也不好拒绝。</p><p>饭桌上，这个人简直大话连篇、牛皮吹上天，仗着自己有点钱，摆足了架子，一副不知天高地厚的样子。后来才知道，他四十来岁，已经有过3段失败的婚姻，现在的小媳妇才25岁，自己婚姻过得一塌糊涂，还滔滔不绝地给我另一个大舅哥讲婚姻大道理，真是让人无语。席间他还叫来了一个人，带着的不是自己的媳妇，用北方话来说，就是“搞破鞋”，全程我都没怎么说话，酒也没喝多少，不过说实话，那家的烤串确实不错，很有特色，吃出了食物本身的香味。</p><p><strong>大年初四</strong>，大概是受了前一天的影响，吃没吃好，喝没喝好，心情也一般。大舅哥非要留我再住一天，说好好陪我玩一天，盛情难却，我就留了下来。这天我们去了多年没进过的网吧，一起玩了现在很火的游戏《三角洲》，玩累了又去看了贺岁片《镖人》，不知道大家有没有看这部电影，看完之后结合现实想一想，还挺让人唏嘘的，也有些可怕。到了晚上，不出意外又是喝酒的时间，过年这些天吃多了大鱼大肉，实在没什么胃口，我还是惦记着前一天的烤串，索性我们又去吃了一顿。</p><p><strong>大年初五</strong>，终于回岳父家了。前几天天天喝酒，身体实在有些吃不消，白天睡了好几觉，才慢慢缓过来。到了晚饭时间，我实在没胃口，就偷偷跑到了我每次回来必去的那家麻辣烫店。这家店开了至少15年，其实味道算不上多好，但我就是喜欢来，就想找找当初的那种感觉，回忆一下以前的时光。</p><p><strong>大年初六</strong>，到了返程的时候，我带着爱人和孩子准备回家。这大概是过年最让人难受的时刻了，岳父岳母舍不得孩子，孩子也抱着老人不想走，看着那一幕，心里酸酸的。可现实就是这样，有太多身不由己，其实最好的办法，还是像我之前许下的心愿那样，多努力赚钱，早点买套房子，把双方父母都接到身边来，再也不用承受这样的离别之苦。临走的时候，岳父岳母又给我们装了满满一车东西，大米、豆油、各种土特产，塞得满满当当，这就是父母的心啊，无论什么时候，心里都惦记着自己的孩子。</p><p>上午10点多，我们准备出发，天空突然乌云密布，下起了小雪，本想着走高速能快一点，没想到高速封路了，没办法，只能走公路返程。一路上开了好几个小时的车，腰酸背痛，浑身疲惫，但看着身边的爱人和孩子，又觉得一切都值得。</p><p>这段春节前后的日子，有热闹，有平淡，有欢喜，有无奈，也有满满的期盼。没有惊天动地的大事，全是细碎的日常，却藏着最真实的幸福和牵挂。新的一年，愿我们都能如愿以偿，努力奔赴自己想要的生活，也愿身边的家人都平安健康，岁岁皆安。</p><p></p>
]]></content:encoded>
<slash:comments>8</slash:comments>
<comments>https://blog.pet111.cn/archives/521/#comments</comments>
<wfw:commentRss>https://blog.pet111.cn/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>小酌配乡爱，快乐最自在</title>
<link>https://blog.pet111.cn/archives/518/</link>
<guid>https://blog.pet111.cn/archives/518/</guid>
<pubDate>Fri, 13 Feb 2026 21:27:00 +0800</pubDate>
<dc:creator>MR.李先森</dc:creator>
<description><![CDATA[最近工作彻底放松下来，基本就跟放假一样，没什么压力，整个人都轻了不少。今天闲着没事，晚上也没正经吃饭，忽然就想小酌一杯，安安静静犒劳一下自己。打开电视，正好播着新春新剧《乡村爱情 18》，一边看...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>最近工作彻底放松下来，基本就跟放假一样，没什么压力，整个人都轻了不少。今天闲着没事，晚上也没正经吃饭，忽然就想小酌一杯，安安静静犒劳一下自己。</p><p>打开电视，正好播着新春新剧《乡村爱情 18》，一边看着热热闹闹的剧情，还有我的毛孩子们，再低头看看手里的酒杯，不用赶时间，不用想工作，就安安心心做自己喜欢的事。这种慢悠悠、又自在又舒服的感觉，真的太好了，整个人都被治愈了。</p><p><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/02/13/1770989400.jpg" alt="IMG_4683.jpg" title="IMG_4683.jpg"><br><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/02/13/1770989370.jpg" alt="IMG_4682.JPG" title="IMG_4682.JPG"></p>
]]></content:encoded>
<slash:comments>10</slash:comments>
<comments>https://blog.pet111.cn/archives/518/#comments</comments>
<wfw:commentRss>https://blog.pet111.cn/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>年关备礼，藏酒藏情</title>
<link>https://blog.pet111.cn/archives/517/</link>
<guid>https://blog.pet111.cn/archives/517/</guid>
<pubDate>Fri, 06 Feb 2026 12:01:00 +0800</pubDate>
<dc:creator>MR.李先森</dc:creator>
<description><![CDATA[年关将至，心里总惦记着给平日里在工作上帮衬我的哥姐，还有家里的亲属们备上点新年礼品。送礼这事儿，我一直觉得贵的不如用心的，投其所好才最实在，再添上点地方特产，心意和特色就都齐了。我住的地方离松原...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>年关将至，心里总惦记着给平日里在工作上帮衬我的哥姐，还有家里的亲属们备上点新年礼品。送礼这事儿，我一直觉得贵的不如用心的，投其所好才最实在，再添上点地方特产，心意和特色就都齐了。我住的地方离<strong>松原查干湖</strong>不远，这<strong>查干湖可是松嫩平原上的一颗明珠，冬日里的冬捕更是盛景，湖水清冽，养出来的鱼肉质鲜嫩、肥而不腻，尤其是胖头鱼，更是查干湖的招牌，个头大、鲜味足，是北方人过年餐桌上的硬菜。</strong>想着让朋友和家人尝尝这份地道的湖鲜，便先备下了查干湖胖头鱼，好事总要成双，这第二份礼品却让我犯了难，琢磨了好几天也没定下来。</p><p>夜里翻来覆去想着这事，突然就想起前些年在松原喝到的一款果味白酒，纯粮酿造的底子，混着淡淡的果香，入口绵柔，喝着顺口还不上头，当时就觉得味道特别好。赶紧联系了松原的把兄弟，托他帮我寄点过来，原本说要 25 斤，兄弟格外实在，还多邮了不少让我尝鲜。我本就爱小酌几口，看着这好酒心里欢喜，却又有些舍不得直接喝，更知道白酒不能长期放在塑料桶里，会影响口感还伤酒，索性干脆订购了一批空酒瓶，自己动手慢慢罐装、仔细封存。</p><p>一晃这些年过去，我亲手封存的白酒也攒下了几十箱。每一箱、每一瓶，我都做了专属的名牌，上面清清楚楚记着封存的时间、地点。这些酒，藏的不只是纯粮的醇香和果味的清甜，更是平日里的点滴情谊，是和兄弟相处的美好时光，也是岁岁年年的生活印记。</p><p>新年的礼，一半是查干湖的鲜，是把家乡的好味道分享给身边人，感谢他们一路的关照与陪伴；一半是亲手封存的酒，是藏在时光里的心意，是对过往的珍惜，也是对未来的期许。</p><p>酒越存越香，情越处越深，而那些剩下的酒，就继续好好珍藏着，等往后的日子里，和兄弟们再聚首，围坐一桌，开上一瓶陈酒，抿一口醇香，聊聊这瓶酒封存时的光景，聊聊我们一路走过的青春，聊聊岁岁年年的欢喜与牵挂。时光慢慢走，酒香悠悠飘，情谊岁岁浓，这人间的美好，大抵就是这般，有酒有友，有暖有盼，新年如此，岁岁皆然。</p><p><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/02/06/1770350587.jpg" alt="封酒 (2).JPG" title="封酒 (2).JPG"><br><img src="https://xsbk-1304530542.cos.ap-beijing.myqcloud.com/2026/02/06/1770350596.jpg" alt="封酒 (1).JPG" title="封酒 (1).JPG"></p>
]]></content:encoded>
<slash:comments>4</slash:comments>
<comments>https://blog.pet111.cn/archives/517/#comments</comments>
<wfw:commentRss>https://blog.pet111.cn/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>愧对那条被我发配回村的狗</title>
<link>https://blog.pet111.cn/archives/514/</link>
<guid>https://blog.pet111.cn/archives/514/</guid>
<pubDate>Thu, 29 Jan 2026 17:14:00 +0800</pubDate>
<dc:creator>MR.李先森</dc:creator>
<description><![CDATA[今早我爸给我打电话，说家里的狗死了。听到消息的那一刻，脑子嗡了一下，心里空落落的。怎么说呢，那只狗是我2023年12月21号带回家的，当时心心念念想养只边牧，结果被人坑了，除了毛色有点像，其他跟...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>今早我爸给我打电话，说家里的狗死了。</p><p>听到消息的那一刻，脑子嗡了一下，心里空落落的。怎么说呢，那只狗是我2023年12月21号带回家的，当时心心念念想养只边牧，结果被人坑了，除了毛色有点像，其他跟边牧半毛钱关系都没有。越长越不对劲，那股子期待慢慢落了空，后来因为我房子卖了，实在没地方放，索性就把它送到了农村老家，一直就让爸妈帮忙照看。</p><p>这事儿我一直挺愧疚的。去年三月，我又买了只纯种血统边牧，聪明、漂亮，天天在我身边好吃好喝，训练、玩耍样样不落。而那只被我送回家的"冒牌边牧"，只能在村里看门、吃剩饭，日子肯定比不了城里的宠物狗。</p><p>今天听到它的死讯，心里真不是滋味。同样是狗，一个在我身边享福，一个却被我"发配"回老家，最后就这么没了。说到底，是我没对它负责到底。</p><p>写这些也没什么用，就当是给自己一个提醒吧。以后做任何决定前，都得想清楚能不能负责到底，尤其是对一条生命。唉，心里堵得慌。</p><p></p>
]]></content:encoded>
<slash:comments>4</slash:comments>
<comments>https://blog.pet111.cn/archives/514/#comments</comments>
<wfw:commentRss>https://blog.pet111.cn/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>新年专属网页悬浮音乐播放器代码</title>
<link>https://blog.pet111.cn/archives/511/</link>
<guid>https://blog.pet111.cn/archives/511/</guid>
<pubDate>Sat, 24 Jan 2026 19:13:00 +0800</pubDate>
<dc:creator>MR.李先森</dc:creator>
<description><![CDATA[上些日子给网站做了有关于新年红的配色，今天就总觉得差点什么，索性写了一个播放器。过年了放上会更加有新年氛围，提前祝大家新年快乐！功能说明响应式布局：手机端底部居中（支持收缩 / 展开），电脑端左...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p><img src="https://pic1.imgdb.cn/item/6975c8300a9bd6cd87022e9c.png" alt="播放器" title="播放器"></p><blockquote>上些日子给网站做了有关于新年红的配色，今天就总觉得差点什么，索性写了一个播放器。过年了放上会更加有新年氛围，提前祝大家新年快乐！</blockquote><p><strong>功能说明</strong><br>响应式布局：手机端底部居中（支持收缩 / 展开），电脑端左下角固定显示<br>核心功能：播放 / 暂停、下一曲切换、单曲结束自动切歌，随机切歌不重复<br>体验优化：刷新 / 页面跳转精准续播、无闪烁无冗余样式、手机端点击空白处收缩展开<br>样式特色：新年红金配色、悬浮阴影效果、按钮交互反馈，适配中文字体无乱码<br>兼容处理：突破浏览器自动播放限制，兼容微信 X5 内核，全局样式无冲突<br>使用说明</p><p><strong>1. 代码部署</strong><br>将以下完整代码直接粘贴到 Typecho 主题自定义 HTML/PHP 文件中（如页脚文件footer.php），建议放在</body>标签前。</p><pre><code class="lang-html">    &lt;style&gt;
    #musicPlayer {
        position: fixed;
        bottom: 10px;
        z-index: 999;
        display: flex;
        align-items: center;
        gap: 12px;
        padding: 8px 20px;
        background: rgba(216, 0, 15, 0.9);
        border-radius: 50px;
        box-shadow: 0 0 20px rgba(250, 108, 0, 0.8);
        -webkit-tap-highlight-color: transparent;
        box-sizing: border-box;
        border: 2px solid #dc8f03;
        left: 50%;
        transform: translateX(-50%);
        min-width: fit-content;
        transition: all 0.3s ease-in-out;
    }
    @media screen and (min-width: 768px) {
        #musicPlayer {
            left: 15px;
            transform: translateX(0);
        }
        #musicInfo {
            display: block !important;
        }
    }
    @media screen and (max-width: 767px) {
        #musicPlayer.shrink {
            padding: 8px;
        }
        #musicInfo {
            display: block;
            transition: all 0.3s ease-in-out;
        }
        #musicPlayer.shrink #musicInfo {
            display: none;
        }
    }
    .music-btn {
        width: 42px;
        height: 42px;
        border-radius: 50%;
        border: none;
        outline: none;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 12px;
        font-weight: bold;
        color: #d8000f;
        background: #dc8f03;
        transition: all 0.3s ease;
        box-shadow: 0 0 10px rgba(250, 108, 0, 0.5);
    }
    .music-btn:hover {
        background: #fff;
        color: #d8000f;
        box-shadow: 0 0 15px rgba(250, 108, 0, 1);
    }
    .music-btn:active {
        transform: scale(0.95);
    }
    #musicInfo {
        color: #fff;
        font-size: 13px;
        font-family: &quot;Microsoft YaHei&quot;, sans-serif;
        white-space: nowrap;
        line-height: 1.2;
    }
    #musicInfo span {
        color: #ffd700;
        font-weight: 500;
    }
    * {
        box-sizing: border-box;
        margin: 0;
        padding: 0;
    }
    &lt;/style&gt;
    &lt;div id=&quot;musicPlayer&quot;&gt;
        &lt;audio id=&quot;bgMusic&quot; preload=&quot;auto&quot; style=&quot;display: none;&quot;&gt;&lt;/audio&gt;
        &lt;button id=&quot;playBtn&quot; class=&quot;music-btn&quot;&gt;播放&lt;/button&gt;
        &lt;button id=&quot;nextBtn&quot; class=&quot;music-btn&quot;&gt;下一曲&lt;/button&gt;
        &lt;div id=&quot;musicInfo&quot;&gt;
            &lt;span id=&quot;playStatus&quot;&gt;暂停播放&lt;/span&gt;：&lt;span id=&quot;songName&quot;&gt;&lt;/span&gt; - &lt;span id=&quot;singerName&quot;&gt;&lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;script&gt;
    window.addEventListener('load', function() {
        const audio = document.getElementById('bgMusic');
        const playBtn = document.getElementById('playBtn');
        const nextBtn = document.getElementById('nextBtn');
        const playStatusEl = document.getElementById('playStatus');
        const songNameEl = document.getElementById('songName');
        const singerNameEl = document.getElementById('singerName');
        const musicPlayer = document.getElementById('musicPlayer');
    
        const musicList = [
            { src: '/UGC/1.mp3', name: '《张灯结彩》', singer: '王二妮、阿宝' },
            { src: '/UGC/2.mp3', name: '《恭喜发财》', singer: '刘德华' },
            { src: '/UGC/3.mp3', name: '《新年大吉》', singer: '祁隆' }
        ];
    
        let lastIndex = -1;
        let isPlaying = false;
        const CACHE_KEY = 'music_play_state';
        let isInitiated = false;
        let isShrinked = false;
    
        function updateStatus() {
            const statusText = isPlaying ? '正在播放' : '暂停播放';
            playStatusEl.innerText = statusText;
            playBtn.innerText = isPlaying ? '暂停' : '播放';
        }
    
        function updateMusicInfo(index) {
            const song = musicList[index];
            songNameEl.innerText = song.name;
            singerNameEl.innerText = song.singer;
        }
    
        function getRandomIndex() {
            let randomIndex;
            do {
                randomIndex = Math.floor(Math.random() * musicList.length);
            } while (randomIndex === lastIndex &amp;&amp; musicList.length &gt; 1);
            lastIndex = randomIndex;
            return randomIndex;
        }
    
        function saveState() {
            const currentIndex = musicList.findIndex(item =&gt; item.src === audio.src);
            const state = {
                isPlaying,
                index: currentIndex &gt; -1 ? currentIndex : 0,
                time: audio.currentTime,
                lastIndex
            };
            sessionStorage.setItem(CACHE_KEY, JSON.stringify(state));
        }
    
        function restoreState() {
            const cache = sessionStorage.getItem(CACHE_KEY);
            if (!cache) return false;
            try {
                const state = JSON.parse(cache);
                audio.src = musicList[state.index].src;
                audio.currentTime = state.time;
                lastIndex = state.lastIndex;
                isPlaying = state.isPlaying;
                updateMusicInfo(state.index);
                return true;
            } catch (e) {
                sessionStorage.removeItem(CACHE_KEY);
                return false;
            }
        }
    
        function toggleShrink() {
            if (window.innerWidth &gt; 767) return;
            isShrinked = !isShrinked;
            musicPlayer.classList.toggle('shrink', isShrinked);
        }
    
        function playCore() {
            audio.muted = true;
            audio.play().then(() =&gt; {
                isPlaying = true;
                updateStatus();
                setTimeout(() =&gt; audio.muted = false, 100);
                isInitiated = true;
                saveState();
                if (window.innerWidth &lt;= 767 &amp;&amp; !isShrinked) {
                    isShrinked = true;
                    musicPlayer.classList.add('shrink');
                }
            }).catch(err =&gt; {
                isPlaying = false;
                updateStatus();
            });
        }
    
        function playMusic() {
            if (!audio.src) {
                const index = getRandomIndex();
                audio.src = musicList[index].src;
                updateMusicInfo(index);
            }
            playCore();
        }
    
        function pauseMusic() {
            audio.pause();
            isPlaying = false;
            updateStatus();
            saveState();
        }
    
        function togglePlay() {
            if (window.innerWidth &lt;= 767 &amp;&amp; isShrinked) {
                toggleShrink();
            }
            isPlaying ? pauseMusic() : playMusic();
        }
    
        function playNext() {
            if (window.innerWidth &lt;= 767 &amp;&amp; isShrinked) {
                toggleShrink();
            }
            const index = getRandomIndex();
            audio.src = musicList[index].src;
            updateMusicInfo(index);
            audio.currentTime = 0;
            playCore();
            setTimeout(() =&gt; {
                if (window.innerWidth &lt;= 767 &amp;&amp; !isShrinked) {
                    isShrinked = true;
                    musicPlayer.classList.add('shrink');
                }
            }, 2000);
        }
    
        playBtn.addEventListener('click', togglePlay);
        playBtn.addEventListener('touchstart', (e) =&gt; { e.preventDefault(); togglePlay(); });
        nextBtn.addEventListener('click', playNext);
        nextBtn.addEventListener('touchstart', (e) =&gt; { e.preventDefault(); playNext(); });
        musicPlayer.addEventListener('click', (e) =&gt; {
            if (e.target === musicPlayer &amp;&amp; window.innerWidth &lt;= 767) {
                toggleShrink();
            }
        });
        musicPlayer.addEventListener('touchstart', (e) =&gt; {
            if (e.target === musicPlayer &amp;&amp; window.innerWidth &lt;= 767) {
                e.preventDefault();
                toggleShrink();
            }
        }, { passive: false });
        audio.addEventListener('ended', playNext);
        audio.addEventListener('timeupdate', saveState);
        window.addEventListener('resize', () =&gt; {
            if (window.innerWidth &gt; 767) {
                musicPlayer.classList.remove('shrink');
            }
        });
    
        const hasCache = restoreState();
        if (hasCache) {
            isPlaying &amp;&amp; playCore();
        } else {
            playMusic();
        }
    
        function initOnUserAction() {
            if (isInitiated) return;
            playMusic();
            document.removeEventListener('click', initOnUserAction);
            document.removeEventListener('touchstart', initOnUserAction);
        }
        document.addEventListener('click', initOnUserAction);
        document.addEventListener('touchstart', initOnUserAction, { passive: false });
    });
    &lt;/script&gt;</code></pre><p><strong>2. 音乐文件配置</strong><br>将 MP3 音乐文件上传至网站/UGC/目录（若无该目录请自行创建）<br>如需修改音乐文件路径 / 添加 / 替换歌曲，直接修改代码中musicList数组即可，格式如下：</p><pre><code class="lang-javascript">const musicList = [
    { src: '音乐文件路径', name: '歌曲名', singer: '歌手名' },
    // 按需添加更多歌曲
];</code></pre><p><strong>3. 基础操作</strong><br>电脑端：直接点击「播放 / 暂停」「下一曲」按钮操作，全程显示歌曲信息<br>手机端：<br>点击按钮自动展开播放器，播放后 2 秒自动收缩<br>点击播放器空白处，可手动切换收缩 / 展开状态<br>切歌时自动展开显示新歌曲信息，2 秒后恢复收缩</p>
]]></content:encoded>
<slash:comments>4</slash:comments>
<comments>https://blog.pet111.cn/archives/511/#comments</comments>
<wfw:commentRss>https://blog.pet111.cn/feed/author/1/</wfw:commentRss>
</item>
</channel>
</rss>