question.html 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <link rel="stylesheet" href="../css/question.css">
  9. <script src="../utils/size.js"></script>
  10. </head>
  11. <body>
  12. <div class="content">
  13. <div class="question-container">
  14. <img class="container-bg" src="../image/question/questionbg.png" alt="">
  15. <div class="title">
  16. <img src="../image/question/title.png" alt="title">
  17. </div>
  18. <div class="subject">
  19. <img class="inset" src="../image/question/inset.png" alt="inset">
  20. <img class="bottom" src="../image/question/bottom.png" alt="bottom">
  21. <audio class="play" src="" autoplay="autoplay" loop="loop" style=" position: absolute;top: .5rem;left: .5rem;">
  22. 您的浏览器不支持 audio 标签。
  23. </audio>
  24. <div class="question-box"></div>
  25. <!--
  26. <div class="question" >
  27. <div class="audio">
  28. <audio src="http://www.ytmp3.cn/down/44537.mp3" autoplay="autoplay" preload="auto">
  29. 您的浏览器不支持 audio 标签。
  30. </audio>
  31. <img class="audiobtn" src="../image/question/audiobtn.png" alt="audiobtn">
  32. <span>甜甜圈从左数是第几个?</span>
  33. </div>
  34. <div class="question-photo"></div>
  35. <ul class="option">
  36. <li class="select">第一个</li>
  37. <li>第二个</li>
  38. <li>第三个</li>
  39. </ul>
  40. <div class="order">
  41. <span>1</span><span>/5</span>
  42. </div>
  43. </div>
  44. -->
  45. </div>
  46. </div>
  47. <div class="popup">
  48. <div class="popup-content">
  49. <canvas id="myCanvas" width="750px" height="1334px">
  50. 您的浏览器不支持canvas标签。
  51. </canvas>
  52. <img class="bg" src="../image/question/2.jpg" alt="">
  53. <div class="baocun">长按保存,并分享至朋友圈</div>
  54. <div class="code">
  55. <img src="../image/question/2.jpg" alt="">
  56. <div class="text">
  57. <span>长按识别二维码</span>
  58. <span>即可获得小学课文朗读配音奖品</span>
  59. </div>
  60. </div>
  61. <!--
  62. <img class="head" src="../image/question/头像.jpg" alt="">
  63. -->
  64. </div>
  65. </div>
  66. </div>
  67. </body>
  68. <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  69. <script>
  70. //获取用户信息
  71. var jionData = {
  72. "code": GetQueryString('code')
  73. }
  74. ajaxData("https://readertest.lingjiao.cn/activity/ucenter/user/wxlogin", '', jionData, function(data) {
  75. alert(data);
  76. })
  77. //获取Canvas对象(画布)
  78. var canvas = document.getElementById("myCanvas");
  79. var data = {
  80. "activityId": "1",
  81. "answer": "",
  82. "questionId": "",
  83. "requestId": ""
  84. }
  85. var ind = 0;
  86. function recursion() {
  87. ajaxData("https://readertest.lingjiao.cn/activity/activity", '7', data, function(result){
  88. var length = result.data.questionNum;
  89. if( ind >= length) {
  90. $('.play').attr('src', "")
  91. $('.popup').show();
  92. //简单地检测当前浏览器是否支持Canvas对象,以免在一些不支持html5的浏览器中提示语法错误
  93. if(canvas.getContext){
  94. //获取对应的CanvasRenderingContext2D对象(画笔)
  95. var ctx = canvas.getContext("2d");
  96. //回调地狱,可优化,暂时这样写
  97. canvasImg(ctx, '../image/question/2.jpg', 0, 0, '750', '1334', function() {
  98. canvasImg(ctx, '../image/question/2.jpg', 200, 400, '50', '50', function() {
  99. ctx.moveTo(125,20);
  100. ctx.lineTo(125,170);
  101. ctx.fillStyle = '#fff';
  102. ctx.font="14px Arial";
  103. ctx.textAlign="center";
  104. ctx.fillText("王丽丽王丽丽丽丽学前测评报告",125,120);
  105. circleImg(ctx, '../image/question/2.jpg', 110, 290, 15)
  106. })
  107. })
  108. ctx.restore();
  109. }
  110. //0.5s后生成图片
  111. setTimeout(function() {
  112. var dataURL = canvas.toDataURL("image/png",1.0);
  113. $('.bg').attr('src', dataURL)
  114. }, 500)
  115. return false;
  116. }
  117. data.questionId = result.data.question.id;
  118. data.requestId = result.data.requestId;
  119. // 一开始创建div 没内容
  120. $("<div></div>", {
  121. "class": "question", // 设置样式类
  122. html: '<div class="order">' +
  123. '<span class="ind">1</span><span>/'+ length +'</span>' +
  124. '</div>', // 设置内容
  125. }).appendTo($('.question-box')); // 追加到body标签
  126. // 初次渲染第一题
  127. renderDiv(ind, result.data.question)
  128. $('.question').eq(ind).children('ul').find('li').on('click', function() {
  129. data.answer = $(this).data('answer');
  130. ind++;
  131. $(this).addClass('select').siblings().removeClass('select');
  132. var that = this;
  133. recursion();
  134. setTimeout(function () {
  135. $(that).parents('.question').slideUp('slow', function () {
  136. $('.question').eq(ind).find('.ind').text(ind + 1);
  137. });
  138. }, 100)
  139. })
  140. })
  141. }
  142. recursion();
  143. // ajax请求
  144. function ajaxData (url, uid, data, success) {
  145. $.ajax({
  146. url: url,
  147. type: 'POST',
  148. headers: {'uid': uid},
  149. contentType:'application/json;charset=utf-8',
  150. data: JSON.stringify(data),
  151. success: success
  152. });
  153. }
  154. // 渲染元素
  155. function renderDiv (ind, datas) {
  156. $('.play').attr('src', datas.audio)
  157. var renders = '<div class="audio">' +
  158. // '<audio src="'+ datas.audio +'" autoplay="autoplay" loop="loop">' +
  159. // '您的浏览器不支持 audio 标签。' +
  160. // '</audio>' +
  161. '<img class="audiobtn" src="../image/question/audiobtn.png" alt="audiobtn">' +
  162. '<div>'+ datas.content +'</div>' +
  163. '</div>' +
  164. '<div class="question-photo">'+
  165. '<img src="'+ datas.imgUrl +'" alt="">'+
  166. '</div>' +
  167. '<ul class="option">' +
  168. '<li data-answer="A">'+ datas.optionA +'</li>' +
  169. '<li data-answer="B">'+ datas.optionB +'</li>' +
  170. '<li data-answer="C">'+ datas.optionC +'</li>' +
  171. '</ul>'
  172. $('.question').eq(ind).prepend(renders)
  173. }
  174. function canvasImg (ctx, url, x, y, w, h, success) {
  175. //创建新的图片对象
  176. var img = new Image();
  177. //指定图片的URL
  178. img.src = url;
  179. //浏览器加载图片完毕后再绘制图片
  180. img.onload = function(){
  181. //以Canvas画布上的坐标(10,10)为起始点,绘制图像
  182. ctx.drawImage(img, x, y, w, h);
  183. success();
  184. };
  185. }
  186. // 封装了一个简单截取头像的方法
  187. function circleImg(ctx, url, x, y, r) {
  188. //创建新的图片对象
  189. var img = new Image();
  190. //指定图片的URL
  191. img.src = url;
  192. ctx.save();
  193. var d =2 * r;
  194. var cx = x + r;
  195. var cy = y + r;
  196. img.onload = function(){
  197. ctx.arc(cx, cy, r, 0, 2 * Math.PI);
  198. ctx.clip();
  199. //以Canvas画布上的坐标(10,10)为起始点,绘制图像
  200. ctx.drawImage(img, x, y, d, d);
  201. };
  202. }
  203. </script>
  204. </html>