实例 2
- DataviewJS
- 随机 3 个文档的 YAML 键
cover
和作者
,点图跳转文档,其中cover
为 URL 网图或 Wiki 链接本地图,详参 YAML 可点击 URL 和 Wiki 链了,分享几个兼适的 DataviewJS 点图跳转文档。 - 点击按钮重新随机,不点击则在 Ob 关闭前一直保持随机结果。
- 随机 3 个文档的 YAML 键
- CSS:同实例 1 卡片视图。
效果
DataviewJS 代码
const files = dv.pages(`"文件目录"`)
.filter(p=> p.cover)
if (files.length < 3) throw new Error('总数不足')
dv.el('button', '随机').onclick = ()=> { delete global.yzx; sj() }
const table = dv.el('div')
, sj = ()=> {
table.empty(); let tdata = []; // 清除旧数据
while (tdata.length < 3) {
const rdm = files[Math.floor(Math.random()*files.length)]
if (!tdata.includes(rdm)) tdata.push(rdm)
}
global.yzx = global.yzx||tdata.map(p=> {
const coverUrl = (p.file.frontmatter.cover.startsWith('http'))
? p.cover
: app.vault.adapter.getResourcePath(p.cover.path)
, cover = `[![|200](<${coverUrl}>)](<${p.file.path}>)`
return [cover, p.作者] // 表体
})
dv.api.table(['', '作者'], global.yzx, table, dv.component) // 加表头成表
}; sj() // 输出
想更改一次随机的数目,修改所有 .length < 3 的 3 为你想要的数值。注意:files.length < 3
这一行对保证 Ob 不会卡死非常重要,务必保证其后数字不小于 tdata.length
后数字。
在看懂实例 1 的前提下,可自行尝试将实例 2 的代码改为点击保存记录、关闭 Ob 再次打开仍保持。
相关:【求助】dateviewjs每天随机3本书;【求助】本地图片随机封面
实例 3
- DataviewJS
- 随机单文件内无序列表内容,以楷体“句:内容”格式展示。
- 点击按钮重新随机,不点击则在 Ob 关闭前一直保持随机结果。
效果
DataviewJS 代码
let content = app.vault.readRaw(dv.page("文件").file.path)
content.then(p=> {
let cList = p.split("\n") // 分块
.filter(p=> p.startsWith("- ")) // 检索
function sj() { dv.container.innerHTML = ''; // 清除旧数据
dv.el("button", "随机").onclick = ()=> { delete global.jz; sj() }
let c = cList[Math.floor(Math.random()*cList.length)]
if (!global.jz) global.jz = `句:${c.substring(2)}`
dv.paragraph(`<span style="font-family: kaiti;">${global.jz}</span>`) // 格式
}; sj() // 输出
})
在掌握 DataviewJS 基本插件语法的前提下,可参考实例 1 分块、检索、格式行自行尝试将实例 3 的代码改为各种路径、各种匹配格式的随机。
另,由于 Ob 保存频繁,除非你想要的刷新频率比 Ob 保存频率更快,如 2、3 秒,想要通过 JS .setInterval()
之类定时器语法定时执行意义不大。如有一定编程基础,可自行修改。
无固定结果、跟随 Ob 刷新的原始代码可参致谢 3 链接的帖子。
相关:【求助】随机展示英语单词
致谢,排名不分先后: