Music.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. Namespace.register("U.MD.UI.music");
  2. /**
  3. * [Control description] 音乐控件总函数
  4. * @param {[type]} musicList [数组json 格式请看文档]
  5. * @param {[type]} index [需要播放第几首歌(索引)]
  6. * @param {[type]} autoplay [是否自动播放] 可填可不填 默认 false
  7. * @param {[type]} parentEl 所需要添加到的父元素 可填可不填 默认document.body
  8. */
  9. U.MD.UI.music = function (musicList, index, autoplay, parentEl) {
  10. var _music = U.MD.UI.music; //简写命名空间
  11. var _musicBox;
  12. if (_musicBox = U.selectEl("#U_MD_UI_music_musicBox")[0]) {
  13. // U.selectEl(_musicBox).removeClass('U_MD_UI_music_hidden');
  14. // var _attr = _music.Attr; //简写全局属性json名
  15. // var _audio = U.selectEl("#U_MD_UI_music_audio"); //audio标签
  16. // _attr.musicList = musicList; //全局赋值
  17. // _attr.musicIndex = index; //全局赋值
  18. // _audio[0].src = musicList[index].src; //添加音乐路径
  19. // var _Name = U.selectEl("#U_MD_UI_music_Name"); //音乐名字节点
  20. // _Name[0].innerText = musicList[index].title; //音乐名字赋值
  21. _musicBox.remove();
  22. }
  23. _music.create(parentEl); //创建音乐控件
  24. _music.Attr = { //存放全局属性
  25. 'musicList': musicList, //所有数据
  26. 'musicIndex': index, //当前数据索引
  27. 'autoplay': autoplay, //第一首是否自动播放
  28. 'currentTime': null, //音乐当前时间未赋值
  29. 'endTime': null //音乐结束时间未赋值
  30. };
  31. _music.init(); //初始化函数
  32. };
  33. U.MD.UI.music.Attr = null; //存放元素与变量的json全局变量 未赋值
  34. U.MD.UI.music.htmlTemplate = ' <div class="U_MD_UI_music_leftCont">\n' +
  35. ' <div class="U_MD_UI_music_CoverBox">\n' +
  36. ' <img src="/img/Controls/Audio/pc/电脑图标.png" alt="" id="U_MD_UI_music_Cover">\n' +
  37. ' </div> <!-- 音乐封面图片 -->\n' +
  38. ' </div>\n' +
  39. ' <div class="U_MD_UI_music_rightCont">\n' +
  40. ' <div class="U_MD_UI_music_Name" id="U_MD_UI_music_Name"></div> <!-- 音乐名字 -->\n' +
  41. ' <div class="U_MD_UI_music_leftBtn" id="U_MD_UI_music_leftBtn"></div> <!-- 左按钮 -->\n' +
  42. ' <div class="U_MD_UI_music_pauseBtn U_MD_UI_music_playBtn" id="U_MD_UI_music_playBtn"></div> <!-- 播放/暂停 按钮 -->\n' +
  43. ' <div class="U_MD_UI_music_rightBtn" id="U_MD_UI_music_rightBtn"></div> <!-- 右按钮 -->\n' +
  44. ' <div class="U_MD_UI_music_soundOpen" id="U_MD_UI_music_soundSwitch"></div> <!-- 声音开关按钮 -->\n' +
  45. ' <div class="U_MD_UI_music_soundBox" id="U_MD_UI_music_soundBox"> <!-- 声音条盒子节点 -->\n' +
  46. ' <div class="U_MD_UI_music_soundBar" id="U_MD_UI_music_soundBar" style="width: 31px;"></div> <!-- 声音条 -->\n' +
  47. ' <div class="U_MD_UI_music_soundBall" id="U_MD_UI_music_soundBall" style="left: 31px;"></div> <!-- 声音球 -->\n' +
  48. ' </div>\n' +
  49. ' <div class="U_MD_UI_music_listBtn"></div> <!-- 右上角的列表按钮 -->\n' +
  50. ' <div class="U_MD_UI_music_shrinkBtn" id="U_MD_UI_music_shrinkBtn"></div> <!-- 右上角的缩小按钮 -->\n' +
  51. ' <div class="U_MD_UI_music_closeBtn" id="U_MD_UI_music_closeBtn"></div> <!-- 右上角的关闭按钮 -->\n' +
  52. ' </div>\n' +
  53. ' <div class="U_MD_UI_music_progressBox" id="U_MD_UI_music_progressBox"> <!-- 时间条盒子节点 -->\n' +
  54. ' <div class="U_MD_UI_music_progressBar" id="U_MD_UI_music_progressBar" style="width: 0.64px;"></div> <!-- 时间条 -->\n' +
  55. ' <div class="U_MD_UI_music_progressBall" id="U_MD_UI_music_progressBall" style="left: 0.64px;"></div> <!-- 时间球 -->\n' +
  56. ' </div>\n' +
  57. ' <audio id="U_MD_UI_music_audio" autoplay="" src=""></audio>';
  58. /**
  59. * 添加音乐控件html代码 并且判断是否存在html 防止多次添加
  60. */
  61. U.MD.UI.music.create = function (parentEl) {
  62. var _parentEl = parentEl || document.body;
  63. var _formclass = { "style": { "border": "none" }, "id": "U_MD_UI_music_musicBox", "className": "U_MD_UI_music_musicBox" };
  64. var _formattr = { isclose: false, isstretching: false, isenlarge: false, isnarrow: false };
  65. var _headclass = { "style": { "height": "13px", "background-color": "#cc5b5b"} };
  66. U.MD.UI.music.player = new U.UF.UI.form(false, U.MD.UI.music.htmlTemplate, _formclass, _formattr, _headclass);
  67. U.selectEl("#U_MD_UI_music_musicBox")[0].style.overflow = "";
  68. // U.UF.F.windowMinimize(_formel);
  69. };
  70. /**
  71. * 音乐控件初始化
  72. */
  73. U.MD.UI.music.init = function () {
  74. var _music = U.MD.UI.music; //简写命名空间
  75. var _attr = _music.Attr; //简写全局属性json名
  76. var _audio = U.selectEl("#U_MD_UI_music_audio"); //audio标签
  77. var _musicList = _attr.musicList; //音乐列表数组
  78. var _musicIndex = _attr.musicIndex; //需要播放的音乐(数组中的第index个)
  79. _audio[0].src = _musicList[_musicIndex].src; //添加音乐路径
  80. var _playBtn = U.selectEl("#U_MD_UI_music_playBtn"); //暂停播放按钮节点
  81. var _Name = U.selectEl("#U_MD_UI_music_Name"); //音乐名字节点
  82. var _corver = U.selectEl("#U_MD_UI_music_Cover"); //封面图片节点
  83. if (!_attr.autoplay) { //若autoplay属性 = false 则第一首音乐暂停
  84. _audio[0].pause();
  85. }
  86. _music.openBtnEvent(); //按钮点击开关 音乐控件隐藏
  87. _music.shrinkBtnEvent(); //缩小事件绑定
  88. _music.soundControl(); //声音控制器
  89. _music.playEvent(); //音乐播放与暂停控制器
  90. _music.switchMusic(); //切换音乐按钮
  91. _music.progressControl(); //音乐进度条控制器*/
  92. _audio.bind('durationchange', function () { //当音乐时长已改变时 给节点赋值
  93. _attr.endTime = this.duration; //总时长赋值
  94. _musicIndex = _attr.musicIndex; //音乐索引位置重赋值
  95. _Name[0].innerText = _musicList[_musicIndex].title; //音乐名字赋值
  96. });
  97. _audio.bind("ended", function () { //音乐结束后切换下一首
  98. _musicIndex = _attr.musicIndex; //由于_attr.musicIndex是一个变量 因此 需要重新赋值
  99. var _listLength = _musicList.length - 1; //获取数组中音乐的长度
  100. if (_musicIndex === _listLength) { //当音乐在数组中为最后一首时 下一首则为第一首 也就是索引 0
  101. _attr.musicIndex = 0;
  102. _musicIndex = _attr.musicIndex;
  103. _audio[0].src = _musicList[_musicIndex].src;
  104. } else { //否则则索引+1
  105. _attr.musicIndex++;
  106. _musicIndex = _attr.musicIndex;
  107. _audio[0].src = _musicList[_musicIndex].src;
  108. }
  109. });
  110. };
  111. /**
  112. * 关闭按钮点击事件
  113. */
  114. U.MD.UI.music.openBtnEvent = function () {
  115. var _music = U.MD.UI.music; //简写命名空间
  116. // var _attr = _music.Attr; //简写全局属性json名
  117. // var _musicBox = U.selectEl("#U_MD_UI_music_musicBox"); //获取音乐控件盒子
  118. // var _closeBtn = U.selectEl("#U_MD_UI_music_closeBtn"); //获取关闭按钮 在控件里 右上角的 叉叉
  119. U.selectEl("#U_MD_UI_music_closeBtn").bind('click', function () {
  120. var _audio = U.selectEl("#U_MD_UI_music_audio"); //audio标签
  121. if (!_audio[0].paused) {
  122. U.selectEl("#U_MD_UI_music_playBtn").addClass('U_MD_UI_music_playBtn'); //暂停音乐并修改图标
  123. _audio[0].pause();
  124. }
  125. U.UF.F.closeWindow(_music.player.form); //调用窗体关闭函数
  126. U.selectEl('#U_MD_D_T_taskbar_music').remove();
  127. // _musicBox.addClass("U_MD_UI_music_hidden"); //点击关闭按钮后 隐藏音乐控件
  128. // _musicBox.addClass("U_MD_UI_music_hidden"); //点击关闭按钮后 隐藏音乐控件
  129. });
  130. };
  131. /**
  132. * 缩小按钮事件绑定
  133. */
  134. U.MD.UI.music.shrinkBtnEvent = function () {
  135. U.selectEl('#U_MD_UI_music_shrinkBtn').bind('click', function () {
  136. U.UF.F.windowMinimize(U.MD.UI.music.player.form); //窗体最小化处理
  137. });
  138. };
  139. /**
  140. * 播放/暂停 的点击事件
  141. */
  142. U.MD.UI.music.playEvent = function () {
  143. var _music = U.MD.UI.music; //简写命名空间
  144. var _attr = _music.Attr; //简写全局属性json名
  145. var _playbtn = U.selectEl("#U_MD_UI_music_playBtn"); //暂停/播放 按钮
  146. var _audio = U.selectEl("#U_MD_UI_music_audio"); //audio标签
  147. _playbtn.bind('click', function () {
  148. if (!_audio[0].paused) { //如在 无暂停状态(播放状态)
  149. _playbtn.addClass('U_MD_UI_music_playBtn'); //暂停音乐并修改图标
  150. _audio[0].pause();
  151. } else { //否则则时 暂停状态时
  152. _playbtn.removeClass('U_MD_UI_music_playBtn');
  153. _audio[0].play(); //播放音乐并修改图标
  154. }
  155. });
  156. };
  157. /**
  158. * 音乐按钮切换(上一首 下一首)
  159. */
  160. U.MD.UI.music.switchMusic = function () {
  161. var _music = U.MD.UI.music; //简写命名空间
  162. var _attr = _music.Attr; //简写全局属性json名
  163. var _audio = U.selectEl("#U_MD_UI_music_audio"); //audio标签
  164. var _rightBtn = U.selectEl("#U_MD_UI_music_rightBtn"); //获取下一首的按钮
  165. var _leftBtn = U.selectEl("#U_MD_UI_music_leftBtn"); //获取上一首的按钮
  166. var _musicList = _attr.musicList; //获取音乐数组数据
  167. var _musicIndex = _attr.musicIndex; //获取当前需要播放音乐 的数组索引
  168. var _listLength = _musicList.length - 1; //获取音乐的数量
  169. _rightBtn.bind('click', function () { //当点击右边(下一首)的按钮时
  170. _musicIndex = _attr.musicIndex; //由于_attr.musicIndex是一个变量 因此 需要重新赋值
  171. if (_musicIndex === _listLength) { //如果当前的歌曲是最后一首时
  172. _attr.musicIndex = 0; //则条转到第一首歌
  173. _musicIndex = _attr.musicIndex; //给全局属性赋值
  174. _audio[0].src = _musicList[_musicIndex].src; //并修改音乐路径
  175. } else { //否则跳转到下一首歌
  176. _attr.musicIndex++; //数组索引加1
  177. _musicIndex = _attr.musicIndex; //给全局属性赋值
  178. _audio[0].src = _musicList[_musicIndex].src; //并修改音乐路径
  179. }
  180. });
  181. _leftBtn.bind('click', function () { //同上 此处是左按钮(上一首)
  182. _musicIndex = _attr.musicIndex; //由于_attr.musicIndex是一个变量 因此 需要重新赋值
  183. if (_musicIndex === 0) {
  184. _attr.musicIndex = _listLength;
  185. _musicIndex = _attr.musicIndex;
  186. _audio[0].src = _musicList[_musicIndex].src;
  187. } else {
  188. _attr.musicIndex--;
  189. _musicIndex = _attr.musicIndex;
  190. _audio[0].src = _musicList[_musicIndex].src;
  191. }
  192. });
  193. };
  194. /**
  195. * 声音事件控制 总函数
  196. */
  197. U.MD.UI.music.soundControl = function () {
  198. var _music = U.MD.UI.music; //简写命名空间
  199. var _audio = U.selectEl("#U_MD_UI_music_audio"); //audio标签
  200. var _soundBox = U.selectEl("#U_MD_UI_music_soundBox"); //声音盒子节点
  201. var _soundBall = U.selectEl("#U_MD_UI_music_soundBall"); //音量球
  202. var _soundBar = U.selectEl("#U_MD_UI_music_soundBar"); //声音条
  203. var _boxWidth = _soundBox[0].clientWidth; //获取盒子宽度 = 声音球位置的最大值
  204. var _volume = 0.5; //声音初始大小
  205. var _soundSwitch = U.selectEl("#U_MD_UI_music_soundSwitch"); //声音开关图标
  206. _audio[0].volume = _volume; //给audio标签添加声音
  207. _soundBall[0].style.left = (_boxWidth * _volume) + "px"; //调整音量球位置 = 总宽度*百分比
  208. _soundBar[0].style.width = (_boxWidth * _volume) + "px"; //调整声音条宽度 = 总宽度*百分比
  209. _soundSwitch.bind('click', function () { //声音开关控制函数
  210. _music.toggleClass(this, 'U_MD_UI_music_soundClose'); //每点击一次 切换样式
  211. if ($(this).hasClass('U_MD_UI_music_soundClose')) { //判断如果样式为关闭时(静音状态)
  212. this._volume = _audio[0].volume; //记录原有的声音值
  213. this._soundBallX = parseFloat(_soundBall.css("left")); //获取音量球的 left值
  214. this._soundBarW = parseFloat(_soundBar.css("width")); //获取音量条的 宽
  215. _soundBall[0].style.left = 0; //音量球的left为0
  216. _soundBar[0].style.width = 0; //音量条的宽为 0
  217. _audio[0].volume = 0; //audio声音也为0
  218. } else { //播放状态
  219. if (!this._volume) { //如果this._volume不存在 则声音赋值时会报错
  220. return;
  221. }
  222. _audio[0].volume = this._volume; //在点一遍开关后 复原到之前记录的值
  223. _soundBall[0].style.left = this._soundBallX + "px"; //给音量球的left赋值
  224. _soundBar[0].style.width = this._soundBarW + "px"; //给音量条的宽赋值
  225. }
  226. });
  227. _soundBox.bind('mousedown', function (e) { //点击进度条后 音量球跳转到鼠标点击位置 并且声音跟随增大或减小
  228. var _boxLeft = _music.getOffsetLeft(this); //body距离盒子左端的left值 = 声音球left的最小值
  229. var _boxRight = _boxLeft + _boxWidth; //body距离盒子右端的left值 = 声音球left的最大值
  230. var _mouseX = e.pageX; //获取鼠标按下时的X坐标
  231. _mouseX = Math.max(_mouseX, _boxLeft); //mouseX 与 boxLeft距离不能小于0 因此 获取两数最大值 原因:声音不能小于0
  232. _mouseX = Math.min(_mouseX, _boxRight); //mouseX 与 boxRight因此 获取两数最大值 原因:声音不能大于1
  233. var _dis = _mouseX - _boxLeft; //鼠标划过的距离
  234. _volume = Math.round(parseFloat(_dis / _boxWidth) * 100) / 100; //距离相对于盒子宽度的值 = 声音百分比大小(此处为保留两位小数点)
  235. _soundBall[0].style.left = (_boxWidth * _volume) + "px"; //音量球left值 改变成 = 总宽*百分比
  236. _soundBar[0].style.width = (_boxWidth * _volume) + "px"; //音量条width 改变成 = 总宽*百分比
  237. _audio[0].volume = _volume; //改变audio标签值
  238. if (_audio[0].volume <= 0) { //如果声音小于=0 时 则改变成 静音状态时的样式 否则则是非静音状态样式
  239. _soundSwitch.addClass('U_MD_UI_music_soundClose');
  240. } else {
  241. _soundSwitch.removeClass('U_MD_UI_music_soundClose');
  242. }
  243. });
  244. _soundBall.bind('mousedown', function (e) { //音量球拖拽效果
  245. U.UF.EV.stopBubble(e); //阻止冒泡
  246. var _oMouseX = e.pageX; //获取鼠标按下时的X坐标
  247. var _soundDrapMove = function (e) { //拖拽时移动用的函数
  248. U.UF.EV.stopDefault(e); //取消默认拖拽
  249. var _mouseX = e.pageX; //鼠标移动时的x坐标
  250. var _dis = _mouseX - _oMouseX + _oX; //移动的距离
  251. _dis = Math.max(0, _dis); //限制音量球left不得小于0
  252. _dis = Math.min(_boxWidth, _dis); //限制音量球left不得大于盒子宽度
  253. _soundBall[0].style.left = _dis + "px"; //音量球位置
  254. _soundBar[0].style.width = _dis + "px"; //音量条宽度
  255. _volume = Math.round(parseFloat(_dis / _boxWidth) * 100) / 100; //声音球距离盒子宽度的left值 = 声音百分比大小(此处为保留两位小数点)
  256. _audio[0].volume = _volume; //音乐的声音赋值
  257. if (_audio[0].volume <= 0) { //判断声音小于0则改成静音图标
  258. _soundSwitch.addClass('U_MD_UI_music_soundClose');
  259. } else { //否则该成非静音图标
  260. _soundSwitch.removeClass('U_MD_UI_music_soundClose');
  261. }
  262. };
  263. var _soundDragUp = function () { //拖拽时松开用的函数
  264. U.selectEl(document).unbind('mousemove', _soundDrapMove);
  265. U.selectEl(document).unbind('mouseup', _soundDragUp);
  266. };
  267. var _oX = parseFloat(_soundBall.css("left")); //获取鼠标按下时音量球的坐标
  268. U.selectEl(document).bind('mousemove', _soundDrapMove);
  269. U.selectEl(document).bind('mouseup', _soundDragUp)
  270. });
  271. };
  272. /**
  273. * 进度条控制 事件总函数
  274. */
  275. U.MD.UI.music.progressControl = function () {
  276. var _music = U.MD.UI.music; //简写命名空间
  277. var _attr = _music.Attr; //简写全局属性json名
  278. var _audio = U.selectEl("#U_MD_UI_music_audio"); //audio标签
  279. var _progressBox = U.selectEl("#U_MD_UI_music_progressBox"); //时间盒子节点
  280. var _progressBall = U.selectEl("#U_MD_UI_music_progressBall"); //时间球
  281. var _progressBar = U.selectEl("#U_MD_UI_music_progressBar"); //时间条
  282. var _playbtn = U.selectEl("#U_MD_UI_music_playBtn"); //播放/暂停 按钮
  283. var _boxWidth = _progressBox[0].clientWidth; //时间盒子宽度 = 时间球位置的最大值
  284. var _barFlag = true, _currentTime; //声明两个全局变量 为更新时间条所用
  285. _audio.bind('timeupdate', function () {
  286. if (!this.paused) { //如在 无暂停状态(播放状态)
  287. _playbtn.removeClass('U_MD_UI_music_playBtn'); //修改成 播放时用的图标
  288. } else { //否则 为暂停状态
  289. _playbtn.addClass('U_MD_UI_music_playBtn'); //修改成暂停用的图标
  290. }
  291. if (_barFlag) { //barFlag = true 为 时间球不在拖拽状态时
  292. _currentTime = this.currentTime; //获取音乐当前播放时间
  293. var _speed = Math.round(parseFloat(_currentTime / _attr.endTime) * 10000) / 10000; //_speed = 当前时间相对于总时长的 百分比
  294. _progressBall[0].style.left = (_boxWidth * _speed) + "px"; //时间球的left = _speed(百分比)*总宽度
  295. _progressBar[0].style.width = (_boxWidth * _speed) + "px"; //时间条的width = _speed(百分比)*总宽度
  296. }
  297. });
  298. _progressBox.bind('mousedown', function (e) { //点击进度条后 时间球跳转到鼠标点击位置 时间跟随改变
  299. var _boxLeft = _music.getOffsetLeft(this); //body距离盒子左端的left值 = 时间球left的最小值
  300. var _boxRight = _boxLeft + _boxWidth; //body距离盒子右端的left值 = 时间球left的最大值
  301. var _mouseX = e.pageX; //获取鼠标按下时的X坐标
  302. _mouseX = Math.max(_mouseX, _boxLeft); //mouseX 与 boxLeft距离不能小于0 因此 获取两数最大值 原因:声音不能小于0
  303. _mouseX = Math.min(_mouseX, _boxRight); //mouseX 与 boxRight因此 获取两数最大值 原因:声音不能大于1
  304. var _dis = _mouseX - _boxLeft; //鼠标划过的距离
  305. _speed = Math.round(parseFloat(_dis / _boxWidth) * 10000) / 10000; //时间球距离盒子宽度的left值 = 时间当前值/总时长(此处为保留4位小数点)
  306. _progressBall[0].style.left = (_boxWidth * _speed) + "px";
  307. _progressBar[0].style.width = (_boxWidth * _speed) + "px";
  308. _audio[0].currentTime = _attr.endTime * _speed;
  309. });
  310. _progressBall.bind('mousedown', function (e) { //时间球拖拽效果
  311. _barFlag = false; //拖拽时 时间球跟随声音播放向前移动状态暂时屏蔽 详细见 timeupdate监听
  312. U.UF.EV.stopBubble(e); //阻止冒泡
  313. var _oMouseX = e.pageX; //获取鼠标按下时的X坐标
  314. var _progressDrapMove = function (e) { //拖拽移动时的函数
  315. U.UF.EV.stopDefault(e); //取消默认拖拽
  316. var _mouseX = e.pageX; //鼠标移动时的x坐标
  317. var _dis = _mouseX - _oMouseX + _oX; //移动的距离
  318. _dis = Math.max(0, _dis); //限制音量球left不得小于0
  319. _dis = Math.min(_boxWidth, _dis); //限制音量球left不得大于盒子宽度
  320. _progressBall[0].style.left = _dis + "px"; //音量球位置
  321. _progressBar[0].style.width = _dis + "px"; //音量条宽度
  322. _speed = Math.round(parseFloat(_dis / _boxWidth) * 10000) / 10000; //时间球距离盒子宽度的left值 = 时间当前值/总时长(此处为保留4位小数点)
  323. _progressBall[0].style.left = (_boxWidth * _speed) + "px"; //时间球的left = 总宽*百分比
  324. _progressBar[0].style.width = (_boxWidth * _speed) + "px"; //时间条的width = 总宽*百分比
  325. _currentTime = _attr.endTime * _speed; //当前时间 = 音乐总时长*百分比
  326. };
  327. var _progressDragUp = function () { //拖拽松开后的函数
  328. _barFlag = true; //拖拽后松开时 时间球跟随声音播放向前移动
  329. _audio[0].currentTime = _currentTime; //当前重新赋值
  330. U.selectEl(document).unbind('mousemove', _progressDrapMove); //删除 mousemove的监听事件
  331. U.selectEl(document).unbind('mouseup', _progressDragUp); //删除mouseup的监听事件
  332. };
  333. var _oX = parseFloat(_progressBall.css("left")); //获取鼠标按下时音量球的坐标
  334. U.selectEl(document).bind('mousemove', _progressDrapMove);
  335. U.selectEl(document).bind('mouseup', _progressDragUp)
  336. });
  337. };
  338. U.MD.UI.music.getOffsetLeft = function (obj) {
  339. var tmp = obj.offsetLeft;
  340. var val = obj.offsetParent;
  341. while (val != null) {
  342. tmp += val.offsetLeft;
  343. val = val.offsetParent;
  344. }
  345. return tmp;
  346. };
  347. U.MD.UI.music.secondToDate = function (result) {
  348. var m = Math.floor((result / 60 % 60));
  349. var s = Math.floor((result % 60));
  350. if (m < 10) {
  351. m = "0" + m;
  352. }
  353. if (s < 10) {
  354. s = "0" + s;
  355. }
  356. return result = m + ":" + s;
  357. };
  358. U.MD.UI.music.toggleClass = function (ele, cls) { //如果存在(不存在),就删除(添加)一个样式
  359. if ($(ele).hasClass(cls)) {
  360. U.selectEl(ele).removeClass(cls);
  361. } else {
  362. U.selectEl(ele).addClass(cls);
  363. }
  364. };