惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
The Cloudflare Blog
J
Java Code Geeks
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
L
LangChain Blog
Recent Announcements
Recent Announcements
Hugging Face - Blog
Hugging Face - Blog
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
I
InfoQ
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
H
Help Net Security
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

优世界

OpenWrt 路由器改纯 AP 模式记录(Cudy TR3000 + 中兴 F50) Ubuntu 24.04 安装 Zabbix 8.0 全记录 我的静态博客动态化方案 Claude Code 启动脚本 我的5G路由器方案:中兴F50+cudy tr3000 256MB 还是弃用了使用多年的全拼输入法 临走前一份襄阳牛肉面 EdgeOne Pages 部署 Twikoo 评论 一个朋友圈风格 Hugo 主题 搓了一个仿朋友圈的Hugo主题 一个人烧烤被拒单了 周末闲暇时间翻修了一下博客 我把Vercel换成了EdgeOne Pages 博客友链实时健康监测方案 Artalk评论区接入AI摘要的尝试 给Hugo博客添加瀑布流相册功能 Hugo静态博客如何实现搜索功能 Artalk评论系统实现段落评论功能 为什么我觉得网页昼夜切换那么重要 博客六周年:从折腾到回归平淡 如何hugo静态实现友联朋友圈功能 脂溢性皮炎的烦恼 还是放弃了iPhone16e 米环勿扰同步问题 除草日记 Hugo使用GitHub Action自动刷新多吉云CDN缓存 迁移博客至hugo parsec远程软件报6023错误 win11右键菜单改回win10方法 主板电流声
添加ikun摆件
2024-08-07 · via 优世界

近日,在浏览GitHub时,首页推送了一个这样的项目,无意点进去,试玩了一下

还是很有意思的,按住人物的立牌拖拽、松手后立牌会向反方向弹跳,还有惯性力效果

主要是还自带音效,在适当区间松手时还会触发语音效果

github.com https://github.com/itorr/sakana 「Sakana!」石蒜模拟器

预览地址:https://lab.magiconch.com/sakana

继续整活

因为主题是单栏风格,内容的两边有很多留白,所以思来想去,决定把这个摆件整合进来

作为一个合格的ikun,当然也少不了整活,于是研究一下源码,修改源码,一气呵成

为了方便维护,将语音包进行base64转码,于是乎就实现了以下效果,鼠标拖拽,适当角度就会触发语音包

image-20240807153134059

快速食用

考虑到很多小伙伴也需要,这里把代码梳理一下 发出来

将以下css加入主题的标签的标签里

.sakana-box-l, 
.sakana-box-r {
    position: fixed !important;
    inset: auto auto -1rem -5rem;
    z-index: 555;
}

.sakana-box-r {
    inset: auto -5rem -1rem auto;
}

@media (max-width: 650px) {
    .sakana-box-l,
    .sakana-box-r {
        display: none;
    }
}

@media (max-width: 1120px) {
    .sakana-box-l,
    .sakana-box-r {
        transform: translateY(0px) scale(0.25) !important;
    }

    .sakana-box-l {
        inset: auto auto -1rem -10rem;
    }

    .sakana-box-r {
        inset: auto -10rem -1rem auto;
    }
}

.sakana-box {
    width: 500px;
    height: 800px;
    position: relative;
    transform-origin: 50% 100%;
    pointer-events: none;
}

.sakana-box canvas {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    pointer-events: none;
}

.sakana-box .sakana-character {
    width: 300px;
    height: 300px;
    position: absolute;
    left: 0;
    right: 0;
    margin: 0 auto;
    bottom: 260px;
    cursor: pointer;
    pointer-events: auto;
    transform-origin: 50% 400px;
    background: no-repeat 50% 50%;
    background-size: cover;
}

.sakana-box .sakana-character[data-character=chisato] {
    background-image: url(这里填写自定义摆件图片url)!important;
}

.sakana-box .sakana-character[data-character=takina] {
    background-image: url(这里填写自定义摆件图片url)!important;
}

.sakana-box .sakana-bed {
    width: 160px;
    height: 20px;
    position: absolute;
    left: 0;
    right: 0;
    margin: 0 auto;
    bottom: 0;
    background: rgba(255, 255, 255, .5) no-repeat 50% 50%;
    border-radius: 2px;
    cursor: pointer;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkAgMAAAANjH3HAAAACVBMVEUAAAAAAAAAAACDY+nAAAAAAnRSTlMAM8lDrC4AAAE2SURBVEjH7dVBjsMwCAVQiyUnGXG0OQXqsqdgif4pJ8YkTh1bnWqkWVRlkVR+BiHiJuUT7x3sKxGsBNBXhQBbiazF58LglXgTnwmi6EToqfBc2IvoKAWat/8Qu0g2JUYoV7EXhf4iD48JiFGKDkIAvA15EMEWmuXFuxAQSbuI9ZSIFEYXAMaAQpvAejGtC9aEugg8Mh1AxbieD7pAANi5HFqTnNLL0X4P0VYk92rKfZP4oSVlb/7uuWVvzZ/LDYPYSmD5nznG4ycR2FwI8BAbhQFUER9F4pGm9JbkkDqOQeAEY+QIu3gtGFJibt+7bCvQIiaeU4YeoiHYhB+EmtxgOZiTWJV7LHyl9ENVL8fO89l1AvwqjAi7SmmiF8kkn761o9hUOFOuUsh+9Q2w14WXQlo+8Z7xAxPfAJiIc7LIAAAAAElFTkSuQmCC);
    background-size: 20px 20px;
    box-shadow: 0 0 0 2px rgba(0, 0, 0, .05);
}

.sakana-box[data-can-switch-character=true] .sakana-bed {
    pointer-events: auto;
}

在footer底部引入js

<script src="https://usj.cc/js/sakana.js"></script>

在主题的自定义js进行插件初始化

 <script>
      Sakana.setMute(false);
      Sakana.init({
        el:         '.sakana-box-l', 
        scale:      .9, 
        character:'takina',
        canSwitchCharacter: false, 
                  inertia: 0.001,
                  decay: 1
      });
</script>
<script>
      Sakana.setMute(false);
      Sakana.init({
        el:         '.sakana-box-r', 
        scale:      .9, 
        character:'chisato',
        canSwitchCharacter: false, 
        inertia: 0.001,
        decay: 1
       });
</script>

在你想展示的位置添加div标签

<div class="sakana-box-l sakana-box" style="transform: translateY(0px) scale(0.5);"><canvas width="750" height="1200" style="width: 500px; height: 800px;"></canvas><div class="sakana-character" data-character="takina" style="transform: rotate(0.263216deg) translateX(0.263216px) translateY(14.4649px);"></div><div class="sakana-bed"></div></div>
<div class="sakana-box-r sakana-box" style="transform: translateY(0px) scale(0.5);"><canvas width="750" height="1200" style="width: 500px; height: 800px;"></canvas><div class="sakana-character" data-character="chisato" style="transform: rotate(0.128919deg) translateX(0.128919px) translateY(0.334859px);"></div><div class="sakana-bed"></div></div>

大功告成!