audio.js 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. /*
  2. * 播放器公用事件
  3. */
  4. define(['css!vendorDir/audio/css/style.css'],function(){
  5. var AUDIO = {
  6. StartTime :0,
  7. timer:"",
  8. x : 0,
  9. totalTime:"",
  10. perTime:"",
  11. dataArr : ["1121","233","23213"],
  12. dataArrMax : [],
  13. timeArr : [],
  14. timeArrMax : [],
  15. id:"",
  16. T:3
  17. };
  18. AUDIO.init = function(div,name,callback){
  19. var audio_desc = $("#audio_desc").text();
  20. require(['html!vendorDir/audio/audio'], function(audio) {
  21. AUDIO.id = div;
  22. $("#"+div).html(audio);
  23. pageBtnInit();
  24. measurTotalTime();
  25. if(typeof callback === "function"){
  26. callback.call();
  27. }
  28. })
  29. };
  30. AUDIO.play = function(){
  31. ONEMAP.C.publisher.publish({
  32. action:'start',
  33. data:AUDIO
  34. }, AUDIO.id);
  35. time();
  36. };
  37. AUDIO.parse = function(){
  38. clearInterval(AUDIO.timer);
  39. ONEMAP.C.publisher.publish({
  40. action:'parse',
  41. data:AUDIO
  42. }, AUDIO.id);
  43. };
  44. AUDIO.initPage=function (){
  45. measurTotalTime();
  46. }
  47. AUDIO.stop = function(){
  48. clearInterval(AUDIO.timer);
  49. AUDIO.StartTime = 0;
  50. AUDIO.x = 0;
  51. $(".audio_btn_parse").hide();
  52. $(".audio_btn_play").show();
  53. $(".audio_progress_btn").css("margin-left",AUDIO.x);
  54. measureNowTime();
  55. ONEMAP.C.publisher.publish({
  56. action:'stop',
  57. data:AUDIO
  58. }, AUDIO.id);
  59. };
  60. AUDIO.forward = function(){
  61. var per = AUDIO.T;
  62. if(AUDIO.StartTime >= AUDIO.totalTime-per){
  63. AUDIO.StartTime = AUDIO.totalTime;
  64. AUDIO.x = $(".audio_progress").width()-7;
  65. $(".audio_progress_btn").css("margin-left",$(".audio_progress").width()-7);
  66. }else{
  67. AUDIO.StartTime += per;
  68. AUDIO.x += AUDIO.perTime*per;
  69. $(".audio_progress_btn").css("margin-left",AUDIO.x);
  70. }
  71. measureNowTime();
  72. if(AUDIO.dataArr.length > 0 && AUDIO.timeArr.length > 0){
  73. var arrIndex = (AUDIO.StartTime-AUDIO.StartTime%AUDIO.T)/AUDIO.T;
  74. }
  75. ONEMAP.C.publisher.publish({
  76. action:'forward',
  77. data:AUDIO
  78. }, AUDIO.id);
  79. };
  80. AUDIO.back = function(){
  81. var per = AUDIO.T;
  82. if(AUDIO.StartTime < per){
  83. AUDIO.StartTime = 0;
  84. AUDIO.x = 0;
  85. }else{
  86. AUDIO.StartTime -= per;
  87. AUDIO.x -= AUDIO.perTime*per;
  88. }
  89. $(".audio_progress_btn").css("margin-left",AUDIO.x);
  90. measureNowTime();
  91. if(AUDIO.dataArr.length > 0 && AUDIO.timeArr.length > 0){
  92. var arrIndex = (AUDIO.StartTime-AUDIO.StartTime%AUDIO.T)/AUDIO.T;
  93. }
  94. ONEMAP.C.publisher.publish({
  95. action:'back',
  96. data:AUDIO
  97. }, AUDIO.id);
  98. };
  99. //开启计时器
  100. function time(){
  101. AUDIO.timer = window.setInterval(timeStart,1000);
  102. }
  103. function measurTotalTime(){
  104. var total = AUDIO.dataArr.length*AUDIO.T;
  105. var totMin = Math.floor(total/60);
  106. var totSecond = total%60;
  107. var totTime = pad(totMin) + ":" + pad(totSecond);
  108. $(".audio_progress_totaltime").empty();
  109. $(".audio_progress_totaltime").val(totTime);
  110. $(".audio_progress_totaltime").text(AUDIO.dataArr.length);
  111. if(AUDIO.dataArr.length > 0){
  112. $(".audio_progress_nowtime").text(1);
  113. }else{
  114. $(".audio_progress_nowtime").text(0);
  115. }
  116. meaurePerTime();
  117. }
  118. function pad(m){
  119. if(m.length<2){
  120. m="0"+m;
  121. return pad(m)
  122. }else{
  123. return m
  124. }
  125. }
  126. //计算圆点每隔一秒前进的像素数
  127. function meaurePerTime(){
  128. var totString = $(".audio_progress_totaltime").val();
  129. var totArr = totString.split(":");
  130. var totMin = parseInt(totArr[0]);
  131. var totSecond = parseInt(totArr[1]);
  132. var proWidth = $(".audio_progress").width();
  133. AUDIO.totalTime = totMin*60 + totSecond;
  134. AUDIO.perTime = proWidth/AUDIO.totalTime;
  135. }
  136. //开始事件
  137. function timeStart(){
  138. AUDIO.StartTime ++;
  139. var proWidth = $(".audio_progress").width();
  140. AUDIO.x += AUDIO.perTime;
  141. if(AUDIO.StartTime >= AUDIO.totalTime){
  142. AUDIO.StartTime = AUDIO.totalTime;
  143. clearInterval(AUDIO.timer);
  144. $(".audio_btn_parse").hide();
  145. $(".audio_btn_play").show();
  146. AUDIO.stop();
  147. }
  148. if(isNaN(AUDIO.StartTime)){
  149. AUDIO.StartTime = 1;
  150. }
  151. var per = AUDIO.T;
  152. var now = (AUDIO.StartTime - AUDIO.StartTime%per)/per + 1;
  153. if(now > AUDIO.totalTime){
  154. now = AUDIO.totalTime;
  155. }
  156. $(".audio_progress_nowtime").empty();
  157. $(".audio_progress_nowtime").text(now);
  158. if(AUDIO.x < proWidth-7){
  159. $(".audio_progress_btn").css("margin-left",AUDIO.x);
  160. }else{
  161. $(".audio_progress_btn").css("margin-left",proWidth-7);
  162. }
  163. //每3秒平播放一次
  164. if(AUDIO.StartTime%AUDIO.T == 0){
  165. ONEMAP.C.publisher.publish({
  166. action:'play',
  167. data:AUDIO
  168. }, AUDIO.id);
  169. }
  170. }
  171. //计算当前页数
  172. function measureNowTime(){
  173. var tmp = AUDIO.x/($(".audio_progress").width()-7);
  174. AUDIO.StartTime = Math.floor(AUDIO.totalTime * tmp);
  175. var per = AUDIO.T;
  176. var now = (AUDIO.StartTime - AUDIO.StartTime%per)/per + 1;
  177. if(now >= AUDIO.dataArr.length){
  178. now = AUDIO.dataArr.length;
  179. }
  180. $(".audio_progress_nowtime").empty();
  181. $(".audio_progress_nowtime").text(now);
  182. }
  183. //初始化播放器页面按钮
  184. function pageBtnInit(){
  185. //播放按钮
  186. $(".audio_btn_play").off('click').on('click',function(){
  187. $(this).hide();
  188. $(".audio_btn_parse").show();
  189. AUDIO.play();
  190. $("#audio_text_pertime_input").attr("readonly","readonly");
  191. });
  192. //暂停按钮
  193. $(".audio_btn_parse").off('click').on('click',function(){
  194. $(this).hide();
  195. $(".audio_btn_play").show();
  196. AUDIO.parse();
  197. });
  198. //前进按钮
  199. $(".audio_btn_forward").off('click').on('click',function(){
  200. AUDIO.forward();
  201. });
  202. //后退按钮
  203. $(".audio_btn_back").off('click').on('click',function(){
  204. if(AUDIO.StartTime == 0){
  205. return false;
  206. }else{
  207. AUDIO.back();
  208. }
  209. });
  210. //停止按钮
  211. $(".audio_btn_stop").off('click').on('click',function(){
  212. if(AUDIO.StartTime == 0){
  213. return false;
  214. }else{
  215. AUDIO.stop();
  216. }
  217. $("#audio_text_pertime_input").removeAttr("readonly");
  218. });
  219. $("#audio_text_pertime_input").change(function(){
  220. measurTotalTime();
  221. });
  222. //时间轴点击
  223. $(".audio_progress").off('click').on('click',function(e){
  224. AUDIO.x = e.pageX - (parseInt($(window).width()) - parseInt($("#audio_div").css("right")) - parseInt($("#audio_div").width())) - 8;
  225. $(".audio_progress_btn").css("margin-left",AUDIO.x);
  226. measureNowTime();
  227. if(AUDIO.dataArr.length > 0 && AUDIO.timeArr.length > 0){
  228. var arrIndex = (AUDIO.StartTime-AUDIO.StartTime%AUDIO.T)/AUDIO.T;
  229. }
  230. }).hover(function(e){
  231. if(AUDIO.dataArr.length > 0 && AUDIO.timeArr.length > 0){
  232. var hoverx = e.pageX - (parseInt($(window).width()) - parseInt($("#audio_div").css("right")) - parseInt($("#audio_div").width())) - 8;
  233. var tmp = hoverx/($(this).width()-7);
  234. var hoverTime = Math.floor(AUDIO.totalTime * tmp);
  235. var arrIndex = (hoverTime-hoverTime%AUDIO.T)/AUDIO.T;
  236. $(this).attr("title",AUDIO.timeArr[arrIndex].stime + "~" + AUDIO.timeArr[arrIndex].etime);
  237. }
  238. },function(){
  239. }).mousemove(function(e){
  240. if(AUDIO.dataArr.length > 0 && AUDIO.timeArr.length > 0){
  241. var movex = e.pageX - (parseInt($(window).width()) - parseInt($("#audio_div").css("right")) - parseInt($("#audio_div").width())) - 8;
  242. var tmp = movex/($(this).width()-7);
  243. var hoverTime = Math.floor(AUDIO.totalTime * tmp);
  244. var arrIndex = (hoverTime-hoverTime%AUDIO.T)/AUDIO.T;
  245. $(this).attr("title",AUDIO.timeArr[arrIndex].stime + "~" + AUDIO.timeArr[arrIndex].etime);
  246. }
  247. });
  248. }
  249. return ONEMAP.M.AUDIO={
  250. AUDIO:AUDIO
  251. }
  252. })