思源笔记折腾记录 - 更多的随机头图

本贴最后更新于 850 天前,其中的信息可能已经渤澥桑田

image

一、前情提要

我们之前搞了一个随机头图:

思源笔记折腾记录-整点花里胡哨-自己定义随机头图 - 知乎 (zhihu.com)

但是它只能随机我们本地的图片。

所以我们来试一下搞出更多的随机图片。

二、原理和实现

1、随机图片接口

随便上网一搜就可以找到很多随机图片接口啦

哪里有获取随机图片的服务接口? - 知乎 (zhihu.com)

不过还是二次元图片居多嗷。。。。。

不管了,反正能用就行。

2、实现一个自定义头图按钮的接口

实际上跟之前做自定义菜单那些差不多啦,不断地查找还没有注入的题头按钮组,然后注入生成的按钮:

noobApi\customBackground\index.js

let 自定义题图按钮 = [] export function 注册自定义题图按钮(按钮选项){ 自定义题图按钮.push(按钮选项) } function 注入全部题图按钮(){ let 题图按钮数组 = document.querySelectorAll('.protyle-background__img .protyle-icons') 题图按钮数组.forEach( 题图按钮组=>{ 注入题图按钮(题图按钮组) } ) } function 注入题图按钮(按钮组){ 自定义题图按钮.forEach( 按钮配置=>{ //这里不打印错误其实更好,自己注释掉吧 try{ if(!按钮组.querySelector(`[data-item-id=${按钮配置.id}]`)){ 生成题图按钮(按钮配置,按钮组) } }catch(e){ console.error(e) } } ) } function 生成题图按钮(按钮配置,按钮组){ let span =document.createElement("span"); span.setAttribute("class", "protyle-icon b3-tooltips b3-tooltips__sw "); span.setAttribute("data-item-id", 按钮配置.id); span.setAttribute("aria-label", 按钮配置.label); span.setAttribute("style", "relative"); span.addEventListener("click", 按钮配置.回调函数); span.innerHTML = `<svg><use xlink:href="${按钮配置.图标}"></use></svg>`; let 随机按钮 = 按钮组.querySelector( "[aria-label='上下拖动图片以调整位置']" ); 按钮组.insertBefore(span, 随机按钮); } //实际上这个可以有性能更好的实现,不过现在这样应该影响也不大 setInterval(注入全部题图按钮,300)

然后把它暴露给其他代码片段使用:

import * as block from './util/blocks.js' import 核心api from './util/kernelApi.js' import 自定义块标菜单 from './customMenu/index.js' import 添加自定义随机背景图 from './customBackground/index.js' import { 注册自定义题图按钮 } from './customBackground/index.js' import 自定义工具栏 from './customToolbar/index.js' import {生成单个dom元素} from './util/dom.js' import {Tab,注册自定义tab} from './customTab/index.js' import * as layoutUtil from './util/layouts.js' 添加自定义随机背景图() let noobApi={ 自定义菜单:{ 块标菜单:自定义块标菜单 }, 内容块:block, 编辑器:{ 自定义工具栏:自定义工具栏, 注册自定义题图按钮 }, 核心api:核心api, DOM工具:{ 生成单个dom元素 }, layouts:{ 注册自定义tab, Tab, util:layoutUtil } } window.noobApi = noobApi

好了,然后随便找了两个随机图片接口弄了上去,如果有自己喜欢的自己再加吧

moreBackGround\index.js

import noobApi from "../noobApi/index.js"; const {注册自定义题图按钮} = noobApi.编辑器 class moreBackground { constructor(){ let 头图按钮配置1 = { id:"小歪", type:"小歪", label:"小歪", 回调函数:(event)=>this.获取小歪图片(event), 图标:"#iconImage" } 注册自定义题图按钮(头图按钮配置1) let 头图按钮配置2 = { id:"acg", type:"acg", label:"小筑", 回调函数:(event)=>this.获取acg图片(event), 图标:"#iconImage" } 注册自定义题图按钮(头图按钮配置2) } 获取文档id(目标){ if(目标.getAttribute('data-node-id')){ return 目标.getAttribute('data-node-id') } else { return this.获取文档id(目标.parentElement) } } async 获取acg图片(event){ event.preventDefault(); let 文档id =this.获取文档id(event.target) let 头图元素组 = document.querySelectorAll(`.protyle-background[data-node-id="${文档id}"] div.protyle-background__img img`) let img = await fetch("https://img.xjh.me/random_img.php?return=302") let imgurl = img.url 头图元素组.forEach( el=>{ el.setAttribute("style","") el.setAttribute("src",imgurl) } ) noobApi.核心api.setBlockAttrs( { id:文档id, attrs:{ "title-img":`background-image:url(${imgurl})` } } ) } async 获取小歪图片(event){ event.preventDefault(); let 文档id = this.获取文档id(event.target) let 头图元素组 = document.querySelectorAll(`.protyle-background[data-node-id="${文档id}"] div.protyle-background__img img`) console.log(文档id) let img = await fetch("https://api.ixiaowai.cn/api/api.php") console.log(img) let imgurl = img.url 头图元素组.forEach( el=>{ el.setAttribute("style","") el.setAttribute("src",imgurl) } ) noobApi.核心api.setBlockAttrs( { id:文档id, attrs:{ "title-img":`background-image:url(${imgurl})` } } ) } } new moreBackground()

ok,完成。

效果就像这样:

更多的随机题图.gif

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    24807 引用 • 102041 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
请输入回帖内容 ...