通用模板2

通过一个字段{{数据}}的json格式来进行适配不同的场景.

anki模板大全 - 图1

引入js文件

  1. <script type="text/javascript" src="_jquery.min.js"> </script>
  2. <script src="_vue.js"></script>
  3. <script src="_jquery.js"></script>
  4. <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>

JSON字段

如果获取不同的场景?

用type来区分。

正面字段

名称 翻译 代码 选择器
question 正面 $(“#front”).html(JSONData.question) front
word 单词 $(“#front”).html(JSONData.question) front

反面字段

名称 翻译 选择器
answer 回答 $(“#back”).html(answer) back
explains 解释,说明,这里转成表格形式 $(“#back”).append(table) back
translation 翻译, $(“#back”).append(
table)
back
wfs 时态 $(“#back”).append(
table)
back
diagram 简图,通过搜索media的地址,匹配位置,然后转成anki模板大全 - 图2 back
media 视频资源,之前是img这是 改为media back

explains

  1. if (explains !== undefined && explains !== "") {
  2. //alert("explain")
  3. if (typeof explains == "string") {
  4. //这里可能有是字符串的情况
  5. //alert("string")
  6. var explains = JSON.parse(explains)
  7. var table = tableDemo(explains, reg2, reg3)
  8. $("#back").html(table)
  9. } else {
  10. //alert('object')
  11. var table = tableDemo(explains)
  12. $("#back").html(table)
  13. }

explainsTable

  1. function explainsTable(JSONList, reg2, reg3) { //json列表或者内容
  2. var table1 = '<table>'
  3. for (var i = 0; i < JSONList.length; i++) {
  4. //alert(JSONList.length)
  5. var prefixArr = JSONList[i].match(reg2)
  6. //alert(prefixArr)
  7. table1 += '<tr>'
  8. if (prefixArr == null) {
  9. var temp = JSONList[i].match(reg3)
  10. // alert(temp)
  11. if (temp == null) {
  12. table1 += '<td>' + '<button type="button" onclick="playAudio(\'' + JSONList[i] +
  13. '\')">播放</button>' +
  14. JSONList[i] +
  15. '</td>'
  16. } else {
  17. table1 += '<td>' + temp[1] + '</td>'
  18. table1 += '<td>' + '<button type="button" onclick="playAudio(\'' + temp[2] + '\')">播放</button>' +
  19. temp[
  20. 2] +
  21. '</td>'
  22. }
  23. } else {
  24. table1 += '<td>' + prefixArr[1] + '</td>'
  25. table1 += '<td>' + '<button type="button" onclick="playAudio(\'' + prefixArr[2] + '\')">播放</button>' +
  26. prefixArr[2] + '</td>'
  27. }
  28. console.log(JSONList[i]);
  29. table1 += '</tr>'
  30. }
  31. table1 += "</table>"
  32. //alert(table1)
  33. return table1
  34. }
参数 什么情况?
jsonList explsin的列表内容,是字符串的话要转成数组形式.
reg2 var reg2 = new RegExp(“(.\.)\s(.)”)
reg3 var reg3 = new RegExp(“\[(.)\]\s(.)”)
reg var reg = new RegExp(“(?<=~!)(.*?)(?=~@)”, “img”)

diagram

anki模板大全 - 图3

  1. function replaceImg2(arr, imgList, replaceContent) { //参数1为正则匹配后的数组,参数2img列表,参数3是替换的内容
  2. if (arr == null || imgList == undefined) {
  3. //alert(x+url)
  4. return replaceContent
  5. }
  6. var num = arr.length
  7. //alert( imgList[0].url)
  8. for (i = 0; i < num; i++) {
  9. var name = arr[i]
  10. var x = arrayFindIndex(name, imgList)
  11. //alert("x"+x)
  12. var url = imgList[x].url
  13. var replaceContent = replaceContent.replace("~!" + name + "~@", url)
  14. }
  15. //alert(replaceContent)
  16. return replaceContent
  17. }
  18. function arrayFindIndex(imgName, imgList) { //数组找到索引
  19. //var imgList = JSONData.img
  20. var listNum = imgList.length
  21. //alert("图像的名称: " + listNum)
  22. for (i = 0; i < listNum; i++) {
  23. var name = imgList[i].name
  24. //alert(name)
  25. if (name == imgName) {
  26. return i
  27. }
  28. }
  29. }
参数
arr 参数1,为正则匹配后的数组
imgList 参数2,为img列表,
replaceContent 参数3,是替换的内容

不同场景

单词正面

anki模板大全 - 图4

问答

anki模板大全 - 图5

单词反面

先通过type判断是什么类型的在进行操作

  1. //全局变量
  2. var data = $("#data").html();
  3. var JSONData = JSON.parse(data)
  4. var explains = JSONData.explains
  5. var translation = JSONData.translation
  6. //alert(translation)
  7. if (explains !== undefined && explains !== "") {
  8. //是字符串的情况下
  9. var textObj = JSON.parse(JSONData.explains)
  10. } else {
  11. if (typeof translation == "string") {
  12. var textObj = [translation]
  13. } else {
  14. var textObj = JSON.parse(JSONData.translation)
  15. }
  16. }
  17. num = textObj.length
  18. if (num == 1) {
  19. $("#name").html(textObj[0])
  20. } else {
  21. var randNum = getRndInteger(0, num - 1)
  22. $("#name").html(textObj[randNum])
  23. }
  24. function getRndInteger(min, max) {
  25. return Math.floor(Math.random() * (max - min + 1)) + min;
  26. }

单词听力

这里需要获取token可以用云端token的方式。

将url化

url来源 url
百度免费 http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&text=百度翻译女声语音播报api
百度收费 http://tsn.baidu.com/text2audio?lan=zh&cuid=123&ctp=1&per=3&spd=5&tex=“ + str + “\”&tok=” + token; token是百度请求获取的
必应 [http://api.microsofttranslator.com/v2/http.svc/speak?appId=TJnIprF8gfKIzzWSJUYbWZBxOdX4nQDJK4o5BoiI42GE*&language=zh-TW&format=audio/mp3&options=MinSize male&text=](http://api.microsofttranslator.com/v2/http.svc/speak?appId=TJnIprF8gfKIzzWSJUYbWZBxOdX4nQDJK4o5BoiI42GE*&language=zh-TW&format=audio/mp3&options=MinSize male&text=)必应翻译男声发音语音播报api
有道翻译 http://dict.youdao.com/dictvoice?audio=有道翻译女声语音播报api

英语文章

字段名是englishArticles

将英语文章拆分成表格

反面显示中文和英语翻译

英语单词划词添加单词

anki模板大全 - 图6

  1. //pc划词触发事件
  2. document.getElementById("front").onclick = function() {
  3. var txt = window.getSelection ? window.getSelection() : document.selection.createRange().text;
  4. alert(txt);
  5. console.log(txt);
  6. //voiceText(txt)
  7. //youdaoTransure(txt.toString())
  8. //voiceText(txt)
  9. };
  1. function youdaoTransure(text) {
  2. if (text == '') return
  3. var appKey = '32e53ed53c5d5381';
  4. var key = '11vLbsXtZ3heU42vHI7RWKJXi8vwbj2A'; //注意:暴露appSecret,有被盗用造成损失的风险
  5. var salt = (new Date).getTime();
  6. var curtime = Math.round(new Date().getTime() / 1000);
  7. var query = text
  8. // 多个query可以用\n连接 如 query='apple\norange\nbanana\npear'
  9. var from = 'en';
  10. var to = 'zh-CHS';
  11. var str1 = appKey + truncate(query) + salt + curtime + key;
  12. var vocabId = '您的用户词表ID';
  13. //console.log('---',str1);
  14. var sign = CryptoJS.SHA256(str1).toString(CryptoJS.enc.Hex);
  15. $.ajax({
  16. url: 'http://openapi.youdao.com/api',
  17. type: 'post',
  18. dataType: 'jsonp',
  19. data: {
  20. q: query,
  21. appKey: appKey,
  22. salt: salt,
  23. from: from,
  24. to: to,
  25. sign: sign,
  26. signType: "v3",
  27. curtime: curtime,
  28. vocabId: vocabId,
  29. },
  30. success: function(data) {
  31. console.log(data);
  32. //弹出卡片
  33. var tempstr = $("#name").text()
  34. var sentence = tempstr.replace(data.query, "<b>" + data.query + "</b>")
  35. var explains = JSON.stringify(data.basic.explains)
  36. var wfs = JSON.stringify(data.basic.wfs)
  37. var ukSpeech = data.basic["uk-speech"]
  38. var usSpeech = data.basic["us-speech"]
  39. console.log(explains);
  40. var obj = {
  41. "word":query,
  42. "explains":explains,
  43. "wfs":wfs
  44. }
  45. return obj
  46. }
  47. });
  48. }

中文文章转英语

解析json数据

  1. var data = $("#data").html();
  2. var JSONData = JSON.parse(data)

遇到的问题

关于解析失败的原因。是json数据带有html标签

图片显示失败

var data = $("#data").html()代码 改为var data = $("#data").text()就行了

正面&反面

通过读取数据1 的内容修改字段”正面”为” 反面”

属性和参数的方法、

在anki的写一个表格,一键添加成json数据

最后能一键从网页上复制就行了

url String 开发者服务器接口地址