在学外语,做笔记梳理时,想给句子加上音频,已经有句子文本和音频文件名的对应文本,怎么能快速将句子设置为音频的锚文本,并点击锚文本即播放呢?
直接插入音频后,会直接显示音频控件,占据的位置太大了,而且也没找到在哪里设置锚文本。
通过超链接设置句子为锚文本后,点击文本会在另一个标签弹出音频控件,然后再点击才能播放,而且要一句一句去设置填写,也比较麻烦。
想问问有没有能直接通过某种格式把我的句子和音频直接转换成点击即播放的形式吗?
在学外语,做笔记梳理时,想给句子加上音频,已经有句子文本和音频文件名的对应文本,怎么能快速将句子设置为音频的锚文本,并点击锚文本即播放呢?
直接插入音频后,会直接显示音频控件,占据的位置太大了,而且也没找到在哪里设置锚文本。
通过超链接设置句子为锚文本后,点击文本会在另一个标签弹出音频控件,然后再点击才能播放,而且要一句一句去设置填写,也比较麻烦。
想问问有没有能直接通过某种格式把我的句子和音频直接转换成点击即播放的形式吗?
方法一,使用 HTML 块实现(编辑器输入 /html,把代码粘贴到对话框即可)
需要开启 设置 》编辑器 》允许执行 HTML 块内脚本
<!-- mp3 列表 -->
<a onclick="playAudio(event,this.href);" href="file:///youpath/demo1.mp3" >demo1</a><br>
<a onclick="playAudio(event,this.href);" href="file:///youpath/demo2.mp3">demo2</a><br>
<!-- js 代码 -->
<script>
var audio;
function playAudio(event,mp3) {
event.preventDefault();
if(!audio){
audio = document.createElement('audio');
document.body.appendChild(audio);
}
audio.src = mp3;
audio.play();
}
</script>
方法二,使用 SQL 查询块实现(编辑器输入 {{}},把代码粘贴到对话框即可)
//!js
return (async () => {
// 这里配置mp3列表
const mp3List = {
"demo1": "file:///youpath/demo1.mp3",
"demo2": "file:///youpath/demo2.mp3",
};
// 代码逻辑区
let list = [];
for (let key in mp3List) {
list.push(`<div><span data-type="a" data-mp3="${mp3List[key]}">${key}</span></div>`);
}
return render(`<div class="mp3List-wrapper">${list.join('')}</div>`, (embed) => {
embed.querySelector('.mp3List-wrapper').addEventListener('click', (event) => {
const mp3 = event.target?.dataset?.mp3;
if (mp3) {
playAudio(mp3);
}
});
});
var audio;
function playAudio(mp3) {
if(!audio){
audio = document.createElement('audio');
document.body.appendChild(audio);
}
audio.src = mp3;
audio.play();
}
function render(html, callback) {
onRender('.b3-form__space--small').then((container) => {
const wysiwygEmbed = container.parentElement;
wysiwygEmbed.style.backgroundColor = 'transparent';
wysiwygEmbed.style.borderLeft='none';
container.outerHTML = html;
if(callback) callback(wysiwygEmbed);
});
return [];
}
function onRender(selector) {
return new Promise(resolve => {
const check = () => {
let el = item.querySelector(selector);
if (el) resolve(el); else requestAnimationFrame(check);
};
check();
});
}
})();
效果
方法一,使用 HTML 块实现(编辑器输入 /html,把代码粘贴到对话框即可)
需要开启 设置 》编辑器 》允许执行 HTML 块内脚本
<!-- mp3 列表 -->
<a onclick="playAudio(event,this.href);" href="file:///youpath/demo1.mp3" >demo1</a><br>
<a onclick="playAudio(event,this.href);" href="file:///youpath/demo2.mp3">demo2</a><br>
<!-- js 代码 -->
<script>
var audio;
function playAudio(event,mp3) {
event.preventDefault();
if(!audio){
audio = document.createElement('audio');
document.body.appendChild(audio);
}
audio.src = mp3;
audio.play();
}
</script>
方法二,使用 SQL 查询块实现(编辑器输入 {{}},把代码粘贴到对话框即可)
//!js
return (async () => {
// 这里配置mp3列表
const mp3List = {
"demo1": "file:///youpath/demo1.mp3",
"demo2": "file:///youpath/demo2.mp3",
};
// 代码逻辑区
let list = [];
for (let key in mp3List) {
list.push(`<div><span data-type="a" data-mp3="${mp3List[key]}">${key}</span></div>`);
}
return render(`<div class="mp3List-wrapper">${list.join('')}</div>`, (embed) => {
embed.querySelector('.mp3List-wrapper').addEventListener('click', (event) => {
const mp3 = event.target?.dataset?.mp3;
if (mp3) {
playAudio(mp3);
}
});
});
var audio;
function playAudio(mp3) {
if(!audio){
audio = document.createElement('audio');
document.body.appendChild(audio);
}
audio.src = mp3;
audio.play();
}
function render(html, callback) {
onRender('.b3-form__space--small').then((container) => {
const wysiwygEmbed = container.parentElement;
wysiwygEmbed.style.backgroundColor = 'transparent';
wysiwygEmbed.style.borderLeft='none';
container.outerHTML = html;
if(callback) callback(wysiwygEmbed);
});
return [];
}
function onRender(selector) {
return new Promise(resolve => {
const check = () => {
let el = item.querySelector(selector);
if (el) resolve(el); else requestAnimationFrame(check);
};
check();
});
}
})();
效果
你的理解没错,思源的 HTML 没有其他笔记的那么直观,虽然思源不支持手动输入 HTML 代码,但粘贴 HTML 代码是可以的,所以建议你在外部编辑好后直接粘贴到文档里。
但要注意思源的 HTML 代码必须以一个 div 标签包裹才行,比如
<div>
<p>hello world</p>
<p>hello world</p>
</div>
这样粘贴就没问题,不会转换为实体
但下面这种粘贴就会转换为 HTML 实体
<p>hello world</p>
<p>hello world</p>
或
<ul>
<li>hello world</li>
<li>hello world</li>
</ul>
解决办法就是在他们前面添加 div 包裹就没问题了,比如改成
<div>
<p>hello world</p>
<p>hello world</p>
</div>
或
<div>
<ul>
<li>hello world</li>
<li>hello world</li>
</ul>
</div>
有了上面的知识,那么批量修改你的代码就很方便了,比如修改成下面这样,然后再粘贴
<div>
<div>英语学习</div>
<script>
var audio;
function playAudio(event,mp3) {
event.preventDefault();
if(!audio){
audio = document.createElement('audio');
document.body.appendChild(audio);
}
audio.src = mp3;
audio.play();
}
</script>
</div>
描述1
<div><a onclick="playAudio(event,this.href);" href="file:///yourpath/demo1.mp3" >demo1</a></div>
描述2
<div><a onclick="playAudio(event,this.href);" href="file:///yourpath/demo2.mp3" >demo2</a></div>
这里的 <script>
标签页可以放到任意一个链接的 HTML 代码块中,这样就不用单独的占一个块了。
如果你的版本不支持,也可以安装 vscode 插件,然后使用源码粘贴。
当然,还有好的方法,比如通过插件或 js 片段魔改 audio 块等,太过复杂,仅供兴趣研究。
黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。
A second brain, for you, forever.
Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。
DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。
CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。
PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。
Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。
CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。
互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。
Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。
以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。
Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。
Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。
哪里都缺人,哪里都不缺人。
Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。
iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。
安全永远都不是一个小问题。
Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。
Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。
代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。
用户在该标签下分享代码片段时需在帖子标题前添加 [css]
或 [js]
用于区分代码片段类型。
IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。
Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。
Latke 是一款以 JSON 为主的 Java Web 框架。
Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。