最近开始使用anki了,想在零碎时间背点东西。找了很多填空题代码,都没有看到合适的,最终决定自己摸索着改了一版。目前测试是Android和win都可正常使用。
模板题型:填空题(带划线)
主要功能:空格处划线,并每个空格可以点击出现答案。
主要样式:
使用了两个字段:内容和相关知识。
内容就是所需背诵的知识点内容,相关知识可以填入扩展知识。
1、正面
2、背面
根据本人的使用需求是把全内容显示设置成了正面,填空划线设置成了背面,这样可以先背再检验是否已记住主要内容,如有需要可以正背面代码互换。
相关知识在正面采用的是全显示的方式,背面可以选择点击相关知识出现内容,根据情况选择是否需要二次背诵。
背面使用的是 anki填空题点一个显示一个,能够实现点击出现一个一个空验证。
代码:
1、正面(全显示,挖空部分显示红色并有下划线)
<div class="h2 xleft" id="div0" style="display:none; ">{{内容}}</div>
<div class="h2 xleft" id="div1" style="display:block;">{{内容}}</div>
{{#相关知识}}
<br><div class="slide">
<div class="h1 zcolor zleft">
<span class="zimg"><height="24" width="24" /></span>
相关知识:
</div>
<div class="h2 zleft">{{相关知识}}</div></div>
{{/相关知识}}
<input class="btn" type="button" onclick="showAndHidden();" value="" style="display:none;" />
<div style="display:none">{{cloze:内容}}</div>
<script type="text/javascript">
var arr = new Array,arr1 = new Array,arr2 = new Array;
/
[].forEach.call(document.querySelectorAll('#div0'),
function(V0) {
V0.innerHTML = V0.innerHTML.replace(/\{\{[c]\d+\:\:([^\{|\}]+?)\}\}/g,
function(cloze) {
var div30='<span id="div3" οnclick="toggle(this)" class="cloze" cloze="@CLOZE@" cloze1="@CLOZE@1" cloze2="@CLOZE@2" wor="wor2">@......@</span>';
var dd1=cloze.indexOf("::"),dd2=cloze.lastIndexOf("::"),dd3=cloze.length,cc=0,cc1=0,cc2=0;
var word = cloze.substring(dd1+2, dd3-2);
var word1,word2;
switch(dd2-dd1){
case 0: word1=word;word2="<uu> </uu>"; break;
case 1: word1=word;word2="<uu> </uu>"; break;
case 2: word1=word;word2="<uu> </uu>"; break;
default:
if(dd3-dd2==4){word1=word;word2="<uu>  </uu>";}
else{word1=cloze.substring(dd1+2, dd2);word2="<uu> "+cloze.substring(dd2+2, dd3-2)+" </uu>";}}
cc=arr.push(word)-1; cc1=arr1.push(word1)-1;cc2=arr2.push(word2)-1;
return div30.replace( '@CLOZE@',cc).replace( '@CLOZE@1',cc1).replace( '@CLOZE@2',cc2).replace( '@......@', word2);
}); });
/
/
[].forEach.call(document.querySelectorAll('#div1'),
function(V2) {
V2.innerHTML = V2.innerHTML.replace(/(\{\{[c]\d+\:\:[^\{|\}]+?)\:\:[^\{|\}]*?\}\}/g,"$1}}").replace(/\{\{[c]\d+\:\:([^\{|\}]+?)\}\}/g,'<span class="cloze">'+"$1"+'</span>');
});
//
//
function toggle(id) {
if (id.getAttribute('wor')=="wor2") {
id.innerHTML = arr1[id.getAttribute('cloze1')];
id.setAttribute('wor',"wor1");
return;}
if (id.getAttribute('wor')=="wor1"){
id.innerHTML = arr2[id.getAttribute('cloze2')];
id.setAttribute('wor',"wor2");
return;}}
/
//
function showAndHidden(){
var div0=document.getElementById("div0");
var div1=document.getElementById("div1");
if(div0.style.display=='block') {div0.style.display='none';}
else {div0.style.display='block';}
if(div1.style.display=='none') {div1.style.display='block';}
else {div1.style.display='none';}
}
</script>
2、背面
<div class="h2 xleft" id="div0" style="display:block;">{{内容}}</div>
<div class="h2 xleft" id="div1" style="display:none; ">{{内容}}</div>
{{#相关知识}}
<br><div class="slide">
<div class="h1 zcolor zleft">
<span class="zimg"><height="24" width="24" /></span>
</div>
<div class="h2 zleft">{{hint:相关知识}}</div></div>
{{/相关知识}}
<input class="btn" type="button" onclick="showAndHidden();" value="" style="display:none;" />
<div style="display:none">{{cloze:内容}}</div>
<script type="text/javascript">
var arr = new Array,arr1 = new Array,arr2 = new Array;
/
[].forEach.call(document.querySelectorAll('#div0'),
function(V0) {
V0.innerHTML = V0.innerHTML.replace(/\{\{[c]\d+\:\:([^\{|\}]+?)\}\}/g,
function(cloze) {
var div30='<span id="div3" οnclick="toggle(this)" class="cloze" cloze="@CLOZE@" cloze1="@CLOZE@1" cloze2="@CLOZE@2" wor="wor2">@......@</span>';
var dd1=cloze.indexOf("::"),dd2=cloze.lastIndexOf("::"),dd3=cloze.length,cc=0,cc1=0,cc2=0;
var word = cloze.substring(dd1+2, dd3-2);
var word1,word2;
switch(dd2-dd1){
case 0: word1=word;word2="<uu> </uu>"; break;
case 1: word1=word;word2="<uu> </uu>"; break;
case 2: word1=word;word2="<uu> </uu>"; break;
default:
if(dd3-dd2==4){word1=word;word2="<uu>  </uu>";}
else{word1=cloze.substring(dd1+2, dd2);word2="<uu> "+cloze.substring(dd2+2, dd3-2)+" </uu>";}}
cc=arr.push(word)-1; cc1=arr1.push(word1)-1;cc2=arr2.push(word2)-1;
return div30.replace( '@CLOZE@',cc).replace( '@CLOZE@1',cc1).replace( '@CLOZE@2',cc2).replace( '@......@', word2);
}); });
/
/
[].forEach.call(document.querySelectorAll('#div1'),
function(V2) {
V2.innerHTML = V2.innerHTML.replace(/(\{\{[c]\d+\:\:[^\{|\}]+?)\:\:[^\{|\}]*?\}\}/g,"$1}}").replace(/\{\{[c]\d+\:\:([^\{|\}]+?)\}\}/g,'<span class="cloze">'+"$1"+'</span>');
});
//
//
function toggle(id) {
if (id.getAttribute('wor')=="wor2") {
id.innerHTML = arr1[id.getAttribute('cloze1')];
id.setAttribute('wor',"wor1");
return;}
if (id.getAttribute('wor')=="wor1"){
id.innerHTML = arr2[id.getAttribute('cloze2')];
id.setAttribute('wor',"wor2");
return;}}
/
function showAndHidden(){
var div0=document.getElementById("div0");
var div1=document.getElementById("div1");
if(div0.style.display=='block') {div0.style.display='none';}
else {div0.style.display='block';}
if(div1.style.display=='none') {div1.style.display='block';}
else {div1.style.display='none';}
}
</script>
3、 CSS
/* ----------各种样式---------- */
body { background-color: #fff; color: black; }
.card {
font: 20px/30px yh;
background-color:#fff;
}
.cloze {
color: #ec6c4f;
#font-weight: bold;
border-bottom: 1px solid #ec6c4f;
-webkit-animation: cloze 0.4s 0s;
-webkit-animation-fill-mode: forwards;
}
.h1 { font: 22px/22px yh; padding: 0.3em 0em 0.3em 0.5em; }
.h2 { font: 20px/30px yh; padding: 0.3em 0em 0.3em 0.5em; }
.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; }
.btn {
opacity: 0.8;
right: 10px;
bottom: 10px;
height: 70px;
width: 70px;
border: none;
background: url(_switch.png);
background-size: 100%;
position: fixed;
}
.btn:active { opacity: 0.9; }
.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; }
uu { border-bottom: 1px 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; }