创建一个支持切换阅读模式和答题模式的Anki问答题模板

为了备考某个需要默写的科目,做了个问答题笔记模板,如下:
笔记正面
在上图的回答栏填写答案后,点击显示答案按钮转到背面:
笔记背面
只实现上面的功能是很简单的,直接基于Anki自带的问答题模板添加自己需要的字段即可。问题是在学习的初期阶段,答案基本上很难写对,所以想在正面直接阅读正确答案,在比较熟悉后再开始回答。这就需要让这个问答题模板支持“阅读”和“答题”两种模式,而且最好在笔记页面提供随时切换的功能。
一顿操作猛如虎,对模板做了一番修改后,终于支持了阅读模式和答题模式的切换。其中的持久化模块依然用的Simon Lammeranki-persistence脚本,该脚本可以兼容WindowsLinuxmacOS、安卓、iOS等常见平台,实现在Anki牌组卡片之间持久化保存信息,该项目发布于github,可以在github搜索该项目以保持版本的更新。修改后的笔记功能如以下图片所示:
改造后的笔记正面:答题模式
改造后的笔记正面:阅读模式
改造后的笔记背面

改造后的笔记正面、背面模板和样式文件附后。其中样式文件包含了很多自带模板中的信息,我并未清理,只是添加了一些自己需要的内容。有一点需要说明的是,下面的代码:

<div class="h1  yleft";align=left>{{FrontSide:type:答案}}</div>

会在笔记背面显示出用户在正面输入的答案以及笔记中保存的正确答案,通过css选择器code#typeans::before 可以将用户在正面输入的答案前面加上“你输入的答案”作为提示,但是花了一段时间查阅文档,没有找到如何选择笔记保存的正确答案的css选择器,希望高手指导。

正面模板:

<script>
// v0.5.3 - https://github.com/SimonLammer/anki-persistence/blob/7107e73086189c190c4d326ef11ebbcded9a08c6/script.js
if(void 0===window.Persistence){var _persistenceKey="github.com/SimonLammer/anki-persistence/",_defaultKey="_default";if(window.Persistence_sessionStorage=function(){var e=!1;try{"object"==typeof window.sessionStorage&&(e=!0,this.clear=function(){for(var e=0;e<sessionStorage.length;e++){var t=sessionStorage.key(e);0==t.indexOf(_persistenceKey)&&(sessionStorage.removeItem(t),e--)}},this.setItem=function(e,t){void 0==t&&(t=e,e=_defaultKey),sessionStorage.setItem(_persistenceKey+e,JSON.stringify(t))},this.getItem=function(e){return void 0==e&&(e=_defaultKey),JSON.parse(sessionStorage.getItem(_persistenceKey+e))},this.removeItem=function(e){void 0==e&&(e=_defaultKey),sessionStorage.removeItem(_persistenceKey+e)})}catch(e){}this.isAvailable=function(){return e}},window.Persistence_windowKey=function(e){var t=window[e],i=!1;"object"==typeof t&&(i=!0,this.clear=function(){t[_persistenceKey]={}},this.setItem=function(e,i){void 0==i&&(i=e,e=_defaultKey),t[_persistenceKey][e]=i},this.getItem=function(e){return void 0==e&&(e=_defaultKey),void 0==t[_persistenceKey][e]?null:t[_persistenceKey][e]},this.removeItem=function(e){void 0==e&&(e=_defaultKey),delete t[_persistenceKey][e]},void 0==t[_persistenceKey]&&this.clear()),this.isAvailable=function(){return i}},window.Persistence=new Persistence_sessionStorage,Persistence.isAvailable()||(window.Persistence=new Persistence_windowKey("py")),!Persistence.isAvailable()){var titleStartIndex=window.location.toString().indexOf("title"),titleContentIndex=window.location.toString().indexOf("main",titleStartIndex);titleStartIndex>0&&titleContentIndex>0&&titleContentIndex-titleStartIndex<10&&(window.Persistence=new Persistence_windowKey("qt"))}}</script>
<script>var myinfo = Persistence.getItem();if (myinfo == null) {myinfo = { model:'answer',};Persistence.setItem(myinfo);}else{let back = document.getElementById('back');let btnToggle = document.getElementById('btnToggle');let answer = document.getElementById('answer');if (myinfo.model == 'answer'){btnToggle.value = '答题模式';back.style = 'display:none';answer.style = 'display:bolck';}else{btnToggle.value = '阅读模式';back.style = 'display:bolck';answer.style = 'display:none';}}function toggleModel(){let obj = event.currentTarget;let back = document.getElementById('back');let answer = document.getElementById('answer');if (myinfo.model == 'answer'){myinfo.model = 'read';obj.value = '阅读模式';back.style='display:bolck';answer.style = 'display:none';}else{myinfo.model = 'answer';obj.value = '答题模式';back.style='display:none';answer.style = 'display:block';}Persistence.setItem(myinfo);}
</script>
<div><a>说明:</a><q>当前模式如下方按钮所示。点击下方按钮可在阅读模式和答题模式之间切换。</q></div>
<div align="center">
<input id='btnToggle' type='button' onclick='toggleModel()' value='答题模式'></input></div><hr class="separator" />
<div class="h1 xcolor xleft"><span></span>	问题<span id="time"></span>
</div>
<div class="h2 xleft" align=left>{{edit:问题}}</div>
<hr class="separator" /><div class="slide"><div class="h1 ycolor yleft"><span>👉</span>	口诀</div><div class="h3  yleft";align=left>{{edit:口诀}}</div>
</div>
<hr class="separator" /><div id='answer' class="h1 ycolor xleft" style='display:block'><span class="yimg">✍️</span>	回答<br><br>{{type:答案}}	<hr class="separator" />
</div><div id='back' style='display:none'><div class="h1 ycolor yleft"><span>👍</span>	正确答案</div><div class='normal'>{{edit:答案}}<div><hr class="separator" /><div class="h1 ycolor xleft md-content"><span></span>备注</div><div class='normal'>{{edit:备注}}<div>
</div>

背面模板:

<div class="h1 xcolor xleft"><span></span>	问题<span id="time"></span>
</div>
<div class="h2 xleft" align=left>{{FrontSide:问题}}</div>
<hr class="separator" /><div class="slide"><div class="h1 ycolor yleft"><span>👉</span>	口诀</div><div class="h3  yleft";align=left>{{FrontSide:口诀}}</div>
</div>
<hr class="separator" />
<div class="slide"><div class="h1 ycolor yleft"><span>👉</span>	答案对比</div><div class="h1  yleft";align=left>{{FrontSide:type:答案}}</div>
</div><hr class="separator" />
<div class="h1 ycolor xleft md-content"><span></span>备注
</div>
<div class='normal'>{{edit:备注}}<div>

样式文件:

@import url("_editor_button_styles.css");/* ----------调用字体---------- */@font-face { font-family: yh; src: url('_FZYHJW.ttf'); }
@font-face { font-family: times; src: url('_times.ttf'); }/* ----------各种样式---------- */body { background-color: #fff; color: black; }
.card {font: 20px/30px 'Aa可爱の日系中文2万字';background-color:#fff;#background-image: url(_bg.png);#background-size:100%;
}.h1 { font: 22px/22px 'Aa可爱の日系中文2万字'; padding: 0.3em 0em 0.3em 0.5em; }
.h2 { font: 20px/30px '干就完事了简'; padding: 0.3em 0em 0.3em 0.5em; }.xleft { border-left: 3px solid #ec6c4f; }
.yleft { border-left: 3px solid #338eca; }
.zleft { border-left: 3px solid #4c991b; }.xcolor { color: #ec6c4f; }
.ycolor { color: #338eca; }
.zcolor { color: #4c991b; }.ximg { background: url(_x-day.svg); background-size: 100%; background-repeat: no-repeat; background-position: center; }
.yimg { background: url(_y-day.svg); background-size: 100%; background-repeat: no-repeat; background-position: center; }
.zimg { background: url(_z-day.svg); background-size: 100%; background-repeat: no-repeat; background-position: center; }.hint { color: #333; }/* ---------- 其他调整 ---------- */a { color: #666; }
img { max-width: 100%; vertical-align: middle; }.chrome img { max-width: 100%; vertical-align: middle; }
ul,ol { margin-top: 0em; }
li { margin-left: -0.5em; }
i { font-family: palatino; padding: 0 3px 0 0; }
u { text-decoration: none; background-color: #ffff75; border-bottom: 2px solid #ec6c4f; }
hr { height: 1px; width: 100%; display: block; border: 0px solid #fff; vertical-align: middle; margin:5px 0px 10px 0px; background-color: #ccc;}
#time { font-family: yh; float: right; } /* ----------夜间模式(Android)---------- */body.night_mode { background-color: #232323; color:#727272; }
.night_mode .card { background-color: #232323;  color:#727272; }.night_mode .xleft { border-left: 3px solid #a0a0a0; }
.night_mode .yleft { border-left: 3px solid #a0a0a0; }
.night_mode .zleft { border-left: 3px solid #a0a0a0; }.night_mode .xcolor { #font-weight: bold; color:#a0a0a0; }
.night_mode .ycolor { #font-weight: bold; color:#a0a0a0; }
.night_mode .zcolor { #font-weight: bold; color:#a0a0a0; }.night_mode .ximg{ background: url(_x-night.svg); background-size: 100%; background-repeat: no-repeat; background-position: center; }
.night_mode .yimg{ background: url(_y-night.svg); background-size: 100%; background-repeat: no-repeat; background-position: center; }
.night_mode .zimg{ background: url(_z-night.svg); background-size: 100%; background-repeat: no-repeat; background-position: center; }.night_mode .hint { color: #727272; }
.night_mode u { color: #a0a0a0; background-color: #505050; border-bottom: 2px solid #5f5f5f; }
.night_mode img { filter: alpha(opacity=30); opacity:0.3;  filter:invert;}
.night_mode audio { filter: alpha(opacity=30); opacity:0.3; }
.night_mode hr { background-color: #484848; }/* ----------动画效果---------- */.slide { position: relative; -webkit-animation: slide 1s 0s; -webkit-animation-fill-mode: forwards; }@-webkit-keyframes slide {0%	{ opacity: 0  ; top: 100px; }50%	{ opacity: 0.8; top: -10px; }100%	{ opacity: 1.0; top: -3px; }
}
.color1,q{font-weight:bold;color:red;
}
.color2,a,a:link,a:visited,a:hover,a:active{font-weight:bold;color:blue;text-decoration:none;
}
.color3,i{font-weight:bold;color:rgb(230,12,237);
}
.separator{border:none;border-top-width:0.3em;border-top-style:solid;border-top-color:#aaa;margin:1.2em 0 1.2em 0;
}
.normal{text-indent:2em;font: 22px/22px 'Aa奶糖油画体','干就完事了简';line-height:1.5em;
}
.h3{font-family:"Aa奇思胖丫儿";color:green;background:yellow;
}
b{font-size:1.2em;-webkit-text-stroke:0.01em #0f0;
}q::before,q::after{content:"";
}
#btnToggle {background-color: #4CAF50; /* Green */border: none;color: yellow;padding: 0.3em;text-align: center;text-decoration: none;display: inline-block;font-size: 1.2em;border-radius:0.5em;box-shadow: 0.1em 0.15em teal;
}
/*输入答案正确时的样式*/
.typeGood{background-color:transparent; /*transparent:透明*/
}
/*输入答案错误时的样式*/
.typeBad{background-color:#ff0;
}
/*输入答案缺少的内容的样式*/
.typeMissed{background-color:pink;
}code#typeans {font-family: "Aa虎头虎脑"; }
code#typeans::before {content:"你输入的答案:";color:#33c;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/339184.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于卷积-小波神经网络的SAR图像海冰变化检测方法(MATLAB R2018A)

海冰是冰冻圈的重要组成部分&#xff0c;海冰的变化信息对航行安全和自然资源开采等非常重要&#xff0c;许多船舶没有加固防冰设备&#xff0c;因此&#xff0c;必须避开所有的冰区。尤其当冰压很高时&#xff0c;即使破冰船也很难在冰层中前行。为了安全航行&#xff0c;获取…

自动化办公01 smtplib 邮件⾃动发送

目录 一、准备需要发送邮件的邮箱账号 二、发送邮箱的基本步骤 1. 登录邮箱 2. 准备数据 3. 发送邮件 三、特殊内容的发送 1. 发送附件 2. 发送图片 3. 发送超文本内容 4.邮件模板内容 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;即简单邮件传输协议…

天气数据集-Jena Climate dataset

天气数据集-Jena Climate dataset 1.数据集基本信息 Dataset Name: mpi_saale_2021b.csv Size: 26495 rows; 1 year (2021), 10 min 气象学、农业、环境科学 开源机构: Max Planck Institute for Biogeochemistry 2.数据特征 2.1 特征简介 数据共有31个特征&#xff0c;…

使用 Scapy 库编写 Ping of Death 攻击脚本

一、介绍 1.1 概述 Ping of Death&#xff08;PoD&#xff09;攻击是一种历史悠久的拒绝服务&#xff08;DoS&#xff09;攻击&#xff0c;攻击者通过发送特制的畸形ICMP Echo请求数据包&#xff0c;导致目标系统无法正确处理&#xff0c;从而导致系统崩溃、重启或无法响应正…

【最新鸿蒙应用开发】——什么是状态管理?

状态管理 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&#xff0c;用户构建了一个UI模型&#xff0c;其中应用的运行时的状态是参数。当参数改变时&#xff0c;UI作为返回结果&#xff0c;也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染&#xf…

【Postman接口测试】第四节.Postman接口测试项目实战(上)

文章目录 前言一、项目介绍 1.1 项目界面功能介绍 1.2 项目测试接口介绍 1.3 项目测试接口流程二、HTTP协议三、接口测试中接口规范四、项目合同新增业务介绍 4.0 接口测试用例设计流程 4.1 登录接口调试 4.2 登录接口自动关联 4.3 添加…

攻防世界---web---Web_php_unserialize

1、题目描述 2、 3、分析代码 class Demo { private $file fl4g.php; }&#xff1a;定义了一个名为Demo的类&#xff0c;该类有一个私有属性$file&#xff0c;默认值为fl4g.php。 $a serialize(new Demo);&#xff1a;创建了一个Demo类的实例&#xff0c;并对其进行序列化&a…

【机器学习】基于OpenCV和TensorFlow的MobileNetV2模型的物种识别与个体相似度分析

在计算机视觉领域&#xff0c;物种识别和图像相似度比较是两个重要的研究方向。本文通过结合深度学习和图像处理技术&#xff0c;基于OpenCV和TensorFlow的MobileNetV2的预训练模型模&#xff0c;实现物种识别和个体相似度分析。本文详细介绍该实验过程并提供相关代码。 一、名…

eNSP学习——VRRP基础配置

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、部署OSPF网络 3、配置VRRP协议 4、验证VRRP主备切换 主要命令 //创建备份组 [R2]int g0/0/1 [R2-GigabitEthernet0/0/1]vrrp vrid 1 virtual-ip 192.168.1.254 //修改优先级 …

自动评论自动私信引流系统,自动化时代的挑战与机遇

随着科技的飞速发展&#xff0c;自动化技术已经渗透到我们生活的方方面面。从工业生产线上的机械臂到家庭中的智能助手&#xff0c;自动化不仅改变了我们的工作方式&#xff0c;也在重塑着社会的面貌。然而&#xff0c;在享受自动化带来的便利和效率的同时&#xff0c;我们也必…

Java实现对PDF、纵向、横向页面添加自定义水印功能

Java实现对PDF、纵向、横向页面添加自定义水印 效果图 -- 纵向 页面PDF使用到JAR Maven依赖版本效果图 -- 横向页面PDF 效果图 – 纵向 页面PDF 代码如下&#xff1a; 使用到JAR Maven依赖版本 <dependency><groupId>org.apache.pdfbox</groupId><artifa…

FLINK-窗口算子

参考资料 官方文档- WindowFlink中的时间和窗口之窗口 窗口 在流处理中&#xff0c;我们往往需要面对的是连续不断、无休无止的无界流&#xff0c;不可能等到所有所有数据都到齐了才开始处理。所以聚合计算其实只能针对当前已有的数据——之后再有数据到来&#xff0c;就需要继…

【计算机毕设】SpringBoot校园资料分享平台的设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的校园资料分享平台&#xff0c;以满足学生在学习过程中对资料分享和获取的需求。具体目标包括&#xff1a…

ServletContext

一、ServletContext对象简介 ServletContext 是应用上下文对象。每一个应用中只有一个 ServletContext 对象, 这个ServletContext 对象被所有Servlet所共享. 在 Servlet 规范中&#xff0c;一共有 4 个域对象。ServletContext 就是其中的一个。它也是 web 应用中最大的作用域&a…

装饰器,状态管理和if判断(HarmonyOS学习第六课)

Builder装饰器-自定义构建函数 前面介绍了如何创建一个自定义组件。该自定义组件内部UI结构固定&#xff0c;仅与使方法进行数据传递。ArkUI还提供了一种更轻量的UI 元素复用机制Builder&#xff0c;Builder 所装饰的函数遵循build( )函数语法规则&#xff0c;开发者可以将重…

飞书API(11):阿里云MaxCompute分区表入库

一、引入 前面入库阿里云 MaxCompute 的数据都是读取之后直接写入&#xff0c;保留数据最新的状态&#xff0c;如果我要保留历史的状态&#xff0c;怎么办呢&#xff1f;MaxCompute 表有一个分区功能&#xff0c;可以自行定义分区。我们可以使用 MaxCompute 表的分区功能&…

vue3-调用API实操-调用开源头像接口

文档部分 这边使用是开源的API 请求地址: &#xff1a;https://api.uomg.com/api/rand.avatar 返回格式 : json/images 请求方式: get/post 请求实例: https://api.uomg.com/api/rand.avatar?sort男&formatjson 请求参数 请求参数说明 名称必填类型说明sort否strin…

云原生架构案例分析_2.云原生技术助力某汽车公司数字化转型实践

名词解释&#xff1a; 互联网 在“互联网”模式下&#xff0c;我们仅仅把互联网看作是一种传播工具、传播手段、传播渠道和传播平台&#xff0c;对于互联网的应用大体上是在既有的运作逻辑的基础之上&#xff0c;把互联网作为延伸传媒影响力、价值和功能的一种延伸型工具&…

打造智能化未来:智能运维系统架构解析与应用实践

在数字化转型的大背景下&#xff0c;智能运维系统成为了企业提升效率、降低成本、增强安全性的关键利器。本文将深入探讨智能运维系统的技术架构&#xff0c;介绍其核心要素和应用实践&#xff0c;帮助读者全面了解智能运维系统的概念、优势和应用价值。 ### 1. 智能运维系统的…

【计算机毕设】基于SpringBoot的医院管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的医院管理系统&#xff0c;以提高医院管理效率&#xff0c;优化医疗服务流程&#xff0c;提升患者就诊体验…