utils.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /**
  2. *
  3. * @param {HTMLDivElement} editor 要操作的编辑器dom,还未想好怎么用
  4. * @param {String} tagName IMG | AUDIO
  5. * @param {String} value 相对于本地电脑资源的路径
  6. */
  7. export function insertTagToEditor(editor, tagName, value, attributes = {}) {
  8. let sel, range;
  9. if (window.getSelection) {
  10. sel = window.getSelection();
  11. if (sel.getRangeAt && sel.rangeCount) {
  12. range = sel.getRangeAt(0);
  13. range.deleteContents();
  14. // TODO:
  15. // if (tagName === "AUDIO") {
  16. // const el = document.createElement("audio");
  17. // el.src = value;
  18. // el.className = "audio";
  19. // // el.style = "height: 18px; width: 180px;";
  20. // el.controls = true;
  21. // el.controlsList = "nodownload";
  22. // // el.draggable = true;
  23. // range.insertNode(el);
  24. // }
  25. if (tagName === "IMG") {
  26. const el = document.createElement("img");
  27. // console.log(value);
  28. el.src = value;
  29. el.dataset.isImage = true;
  30. if (Object.keys(attributes).length) {
  31. Object.keys(attributes).forEach((k) => {
  32. el.setAttribute(k, attributes[k]);
  33. });
  34. }
  35. range.insertNode(el);
  36. range.collapse();
  37. }
  38. editor && editor.dispatchEvent(new Event("input"));
  39. }
  40. }
  41. }
  42. /**
  43. * 将音频路径转换为图片占位符
  44. *
  45. * @param {aduioSrc} value 相对于本地电脑资源的路径
  46. * @returns {HTMLImageElement} 图片节点
  47. */
  48. export async function audioToImageNode(audioSrc) {
  49. const duration = 1;
  50. const el = document.createElement("img");
  51. el.src = "/img/editor/text_audio.png";
  52. el.dataset.isAudio = true;
  53. el.dataset.audioSrc = audioSrc;
  54. el.dataset.duration = duration;
  55. const mDuration = require("moment").unix(0);
  56. mDuration.second(duration);
  57. el.title = mDuration.format("mm:ss");
  58. el.className = "audio";
  59. return el;
  60. }
  61. /**
  62. * 获取答题点序号图片base64
  63. * @param {number} serialNo 答题点序号
  64. * @returns dataUrl
  65. */
  66. export function getAnswerPointImg(serialNo) {
  67. const canvas = document.createElement("canvas");
  68. const ctx = canvas.getContext("2d");
  69. canvas.width = 64;
  70. canvas.height = 32;
  71. ctx.font = "bolder 30px serif";
  72. ctx.textAlign = "center";
  73. ctx.textBaseline = "middle";
  74. ctx.fillText(`(${serialNo})`, 32, 16);
  75. return canvas.toDataURL();
  76. }
  77. export function base64ToBlob(base64Str) {
  78. var bytes = atob(base64Str.split(",")[1]);
  79. let arr = new Uint8Array(bytes.length);
  80. for (let i = 0; i < bytes.length; i++) {
  81. arr[i] = bytes.charCodeAt(i);
  82. }
  83. return new Blob([arr], { type: "image/png" });
  84. }