Commit 496be00ec3fc3005698f102af6defa0f0f00dfbc
1 parent
f83fd6f3
no message
Showing
1 changed file
with
0 additions
and
703 deletions
audio/index.html deleted
100644 → 0
| 1 | -<!DOCTYPE html> | |
| 2 | -<html lang="en"> | |
| 3 | - | |
| 4 | -<head> | |
| 5 | - <meta charset="UTF-8"> | |
| 6 | - <title>音频</title> | |
| 7 | - <style type="text/css"> | |
| 8 | - #componentWrapper, | |
| 9 | - #componentWrapper *{ | |
| 10 | - -webkit-box-sizing: border-box; | |
| 11 | - box-sizing: border-box; | |
| 12 | - margin: 0; | |
| 13 | - padding: 0; | |
| 14 | - border: 0; | |
| 15 | - outline: none; | |
| 16 | - } | |
| 17 | - #componentWrapper { | |
| 18 | - position: relative; | |
| 19 | - height: 40px; | |
| 20 | - font-family: Arial, Helvetica, sans-serif; | |
| 21 | - font-size: 15px; | |
| 22 | - display: -webkit-flex; | |
| 23 | - display: flex; | |
| 24 | - } | |
| 25 | - | |
| 26 | - #componentWrapper .controls_toggle { | |
| 27 | - position: relative; | |
| 28 | - width: 40px; | |
| 29 | - height: 40px; | |
| 30 | - background: #333; | |
| 31 | - border-right: 1px solid #555; | |
| 32 | - border-right-color: rgba( 255, 255, 255, .1); | |
| 33 | - background-image: url(../images/player_bg2.png); | |
| 34 | - background-repeat: repeat-x; | |
| 35 | - -webkit-box-shadow: 1px 1px 6px #333; | |
| 36 | - box-shadow: 1px 1px 6px #333; | |
| 37 | - behavior: url(PIE.htc); | |
| 38 | - cursor: pointer; | |
| 39 | - } | |
| 40 | - | |
| 41 | - #componentWrapper .controls_toggle img { | |
| 42 | - display: block; | |
| 43 | - position: absolute; | |
| 44 | - width: 12px; | |
| 45 | - height: 15px; | |
| 46 | - left: 50%; | |
| 47 | - top: 50%; | |
| 48 | - margin-left: -6px; | |
| 49 | - margin-top: -8px; | |
| 50 | - -webkit-user-select: none; | |
| 51 | - user-select: none; | |
| 52 | - } | |
| 53 | - | |
| 54 | - #componentWrapper .player_mediaTime_current { | |
| 55 | - position: relative; | |
| 56 | - width: 60px; | |
| 57 | - height: 40px; | |
| 58 | - color: white; | |
| 59 | - text-align: center; | |
| 60 | - line-height: 40px; | |
| 61 | - border-left: 1px solid #111; | |
| 62 | - border-left: 1px solid rgba( 0, 0, 0, .25); | |
| 63 | - background-image: url(../images/player_bg2.png); | |
| 64 | - background-repeat: repeat-x; | |
| 65 | - -webkit-box-shadow: 1px 1px 6px #333; | |
| 66 | - box-shadow: 1px 1px 6px #333; | |
| 67 | - behavior: url(PIE.htc); | |
| 68 | - -webkit-user-select: none; | |
| 69 | - user-select: none; | |
| 70 | - } | |
| 71 | - | |
| 72 | - #componentWrapper .player_progress { | |
| 73 | - position: relative; | |
| 74 | - height: 40px; | |
| 75 | - background-image: url(../images/player_bg2.png); | |
| 76 | - background-repeat: repeat-x; | |
| 77 | - -webkit-box-shadow: 1px 1px 6px #333; | |
| 78 | - box-shadow: 1px 1px 6px #333; | |
| 79 | - behavior: url(PIE.htc); | |
| 80 | - cursor: pointer; | |
| 81 | - flex: 1; | |
| 82 | - } | |
| 83 | - | |
| 84 | - #componentWrapper .progress_bg { | |
| 85 | - position: absolute; | |
| 86 | - height: 10px; | |
| 87 | - background: #222; | |
| 88 | - top: 15px; | |
| 89 | - left: 10px; | |
| 90 | - right: 10px; | |
| 91 | - -webkit-box-shadow: -1px -1px 0 rgba( 0, 0, 0, .5), 1px 1px 0 rgba( 255, 255, 255, .1); | |
| 92 | - box-shadow: -1px -1px 0 rgba( 0, 0, 0, .5), 1px 1px 0 rgba( 255, 255, 255, .1); | |
| 93 | - -webkit-border-radius: 4px; | |
| 94 | - border-radius: 4px; | |
| 95 | - } | |
| 96 | - | |
| 97 | - #componentWrapper .load_progress { | |
| 98 | - position: absolute; | |
| 99 | - height: 10px; | |
| 100 | - background: #444; | |
| 101 | - top: 15px; | |
| 102 | - left: 10px; | |
| 103 | - right: 10px; | |
| 104 | - width: 0px; | |
| 105 | - -webkit-border-radius: 4px; | |
| 106 | - border-radius: 4px; | |
| 107 | - } | |
| 108 | - | |
| 109 | - #componentWrapper .play_progress { | |
| 110 | - position: absolute; | |
| 111 | - height: 10px; | |
| 112 | - background: #fff; | |
| 113 | - top: 15px; | |
| 114 | - left: 10px; | |
| 115 | - right: 10px; | |
| 116 | - width: 0px; | |
| 117 | - -webkit-border-radius: 4px; | |
| 118 | - border-radius: 4px; | |
| 119 | - } | |
| 120 | - | |
| 121 | - #componentWrapper .player_progress_tooltip { | |
| 122 | - position: relative; | |
| 123 | - top: -10px; | |
| 124 | - width: 72px; | |
| 125 | - background: #333; | |
| 126 | - height: 16px; | |
| 127 | - display: none; | |
| 128 | - text-align: center; | |
| 129 | - -webkit-box-shadow: 1px 1px 3px #222; | |
| 130 | - box-shadow: 1px 1px 3px #222; | |
| 131 | - behavior: url(PIE.htc); | |
| 132 | - } | |
| 133 | - | |
| 134 | - #componentWrapper .player_progress_tooltip p { | |
| 135 | - color: white; | |
| 136 | - font-size: 10px; | |
| 137 | - margin: 0; | |
| 138 | - line-height: 16px; | |
| 139 | - } | |
| 140 | - | |
| 141 | - #componentWrapper .player_mediaTime_total { | |
| 142 | - position: relative; | |
| 143 | - width: 60px; | |
| 144 | - height: 40px; | |
| 145 | - color: white; | |
| 146 | - text-align: center; | |
| 147 | - line-height: 40px; | |
| 148 | - border-right: 1px solid #555; | |
| 149 | - border-right: 1px solid rgba( 255, 255, 255, .1); | |
| 150 | - background-image: url(../images/player_bg2.png); | |
| 151 | - background-repeat: repeat-x; | |
| 152 | - -webkit-box-shadow: 1px 1px 6px #333; | |
| 153 | - box-shadow: 1px 1px 6px #333; | |
| 154 | - behavior: url(PIE.htc); | |
| 155 | - -webkit-user-select: none; | |
| 156 | - user-select: none; | |
| 157 | - } | |
| 158 | - | |
| 159 | - #componentWrapper .player_volume_wrapper { | |
| 160 | - position: relative; | |
| 161 | - height: 40px; | |
| 162 | - display: -webkit-flex; | |
| 163 | - display: flex; | |
| 164 | - } | |
| 165 | - | |
| 166 | - #componentWrapper .player_volume { | |
| 167 | - position: relative; | |
| 168 | - width: 40px; | |
| 169 | - height: 40px; | |
| 170 | - border-left: 1px solid #111; | |
| 171 | - border-left-color: rgba( 0, 0, 0, .25); | |
| 172 | - background-image: url(../images/player_bg2.png); | |
| 173 | - background-repeat: repeat-x; | |
| 174 | - -webkit-box-shadow: 1px 1px 6px #333; | |
| 175 | - box-shadow: 1px 1px 6px #333; | |
| 176 | - behavior: url(PIE.htc); | |
| 177 | - cursor: pointer; | |
| 178 | - } | |
| 179 | - | |
| 180 | - #componentWrapper .player_volume img { | |
| 181 | - display: block; | |
| 182 | - position: absolute; | |
| 183 | - width: 18px; | |
| 184 | - height: 16px; | |
| 185 | - left: 50%; | |
| 186 | - top: 50%; | |
| 187 | - margin-left: -9px; | |
| 188 | - margin-top: -8px; | |
| 189 | - -webkit-user-select: none; | |
| 190 | - user-select: none; | |
| 191 | - } | |
| 192 | - | |
| 193 | - #componentWrapper .volume_seekbar { | |
| 194 | - position: relative; | |
| 195 | - width: 80px; | |
| 196 | - height: 40px; | |
| 197 | - background-image: url(../images/player_bg2_vol.png); | |
| 198 | - background-repeat: repeat-x; | |
| 199 | - -webkit-box-shadow: 1px 1px 6px #333; | |
| 200 | - box-shadow: 1px 1px 6px #333; | |
| 201 | - behavior: url(PIE.htc); | |
| 202 | - /*display: none;*/ | |
| 203 | - cursor: pointer; | |
| 204 | - } | |
| 205 | - | |
| 206 | - #componentWrapper .volume_bg { | |
| 207 | - position: absolute; | |
| 208 | - width: 60px; | |
| 209 | - height: 10px; | |
| 210 | - background: #222; | |
| 211 | - bottom: 15px; | |
| 212 | - left: 10px; | |
| 213 | - -webkit-box-shadow: -1px -1px 0 rgba( 0, 0, 0, .5), 1px 1px 0 rgba( 255, 255, 255, .1); | |
| 214 | - box-shadow: -1px -1px 0 rgba( 0, 0, 0, .5), 1px 1px 0 rgba( 255, 255, 255, .1); | |
| 215 | - -webkit-border-radius: 4px; | |
| 216 | - border-radius: 4px; | |
| 217 | - } | |
| 218 | - | |
| 219 | - #componentWrapper .volume_level { | |
| 220 | - position: absolute; | |
| 221 | - width: 30px; | |
| 222 | - height: 10px; | |
| 223 | - background: #fff; | |
| 224 | - bottom: 15px; | |
| 225 | - left: 10px; | |
| 226 | - -webkit-border-radius: 4px; | |
| 227 | - border-radius: 4px; | |
| 228 | - } | |
| 229 | - | |
| 230 | - #componentWrapper .player_volume_tooltip { | |
| 231 | - position: relative; | |
| 232 | - left: -15px; | |
| 233 | - top: -4px; | |
| 234 | - width: 35px; | |
| 235 | - height: 16px; | |
| 236 | - background: #333; | |
| 237 | - display: none; | |
| 238 | - text-align: center; | |
| 239 | - -webkit-box-shadow: 1px 1px 3px #222; | |
| 240 | - box-shadow: 1px 1px 3px #222; | |
| 241 | - behavior: url(PIE.htc); | |
| 242 | - } | |
| 243 | - | |
| 244 | - #componentWrapper .player_volume_tooltip p { | |
| 245 | - font-family: Arial, Helvetica, sans-serif; | |
| 246 | - font-size: 10px; | |
| 247 | - color: #ffffff; | |
| 248 | - margin: 0; | |
| 249 | - line-height: 18px; | |
| 250 | - } | |
| 251 | - </style> | |
| 252 | -</head> | |
| 253 | - | |
| 254 | -<body> | |
| 255 | - <style type="text/css"> | |
| 256 | - li a { | |
| 257 | - line-height: 2; | |
| 258 | - text-indent: 1em; | |
| 259 | - color: #00f; | |
| 260 | - display: block; | |
| 261 | - } | |
| 262 | - | |
| 263 | - li a:hover { | |
| 264 | - background-color: #dcdcdc; | |
| 265 | - } | |
| 266 | - </style> | |
| 267 | - <ul> | |
| 268 | - <li><a href="javascript:;" data-url="./Fade.mp3">Fade</a></li> | |
| 269 | - <li><a href="javascript:;" data-url="./failed.mp3">failed</a></li> | |
| 270 | - <li><a href="javascript:;" data-url="./yinweiaiqing.mp4">因为爱情</a></li> | |
| 271 | - <li><a href="javascript:;" data-url="./tonghuazhen.mp3">童话镇</a></li> | |
| 272 | - <li><a href="javascript:;" data-url="./miaolingtong.mp3">妙龄童</a></li> | |
| 273 | - </ul> | |
| 274 | - <div id="audioWrap"></div> | |
| 275 | - | |
| 276 | - <script type="text/javascript" src="../lib/jquery-3.1.1.min.js"></script> | |
| 277 | - <script type="text/javascript"> | |
| 278 | - var AUDIO = { | |
| 279 | - options: { | |
| 280 | - debuggers: false, // 是否开启播放记录 | |
| 281 | - container: 'body', // 把组件塞到什么地方 | |
| 282 | - source: '', // 音频源文件 | |
| 283 | - seekNum: 0, // 拖拽是判断之前是否播放 | |
| 284 | - allowSeek: true, // 是否可以拖拽 | |
| 285 | - canplayCallback: null, // 可以播放之后,做某些事情 | |
| 286 | - playCallback: null, // 播放之后,做某些事情 | |
| 287 | - pauseCallback: null, // 暂停之后,做某些事情 | |
| 288 | - timeupdateCallback: null, // 拖动之后,做某些事情 | |
| 289 | - endedCallback: null, // 播放结束之后,做某些事情 | |
| 290 | - mutedCallback: null, // 静音之后,做某些事情 | |
| 291 | - template: $('<div id="componentWrapper">' + | |
| 292 | - '<audio id="audio-element" style="display: none;">您的浏览器不支持 audio 标签。</audio>' + | |
| 293 | - '<div class="controls_toggle"><img src="../images/play.png" alt="controls_toggle" /></div>' + | |
| 294 | - '<div class="player_mediaTime_current">00:00</div>' + | |
| 295 | - '<div class="player_progress">' + | |
| 296 | - '<div class="progress_bg"></div>' + | |
| 297 | - '<div class="load_progress"></div>' + | |
| 298 | - '<div class="play_progress"></div>' + | |
| 299 | - '<div class="player_progress_tooltip">' + | |
| 300 | - '<p></p>' + | |
| 301 | - '</div>' + | |
| 302 | - '</div>' + | |
| 303 | - '<div class="player_mediaTime_total">00:00</div>' + | |
| 304 | - '<div class="player_volume_wrapper">' + | |
| 305 | - '<div class="player_volume"><img src="../images/volume.png" alt="player_volume" /></div>' + | |
| 306 | - '<div class="volume_seekbar">' + | |
| 307 | - '<div class="volume_bg"></div>' + | |
| 308 | - '<div class="volume_level"></div>' + | |
| 309 | - '<div class="player_volume_tooltip">' + | |
| 310 | - '<p></p>' + | |
| 311 | - '</div>' + | |
| 312 | - '</div>' + | |
| 313 | - '</div>' + | |
| 314 | - '</div>') | |
| 315 | - }, | |
| 316 | - elements: {}, | |
| 317 | - init: function(options) { | |
| 318 | - var _this = this; | |
| 319 | - if (!options || !options.container) { | |
| 320 | - return false; | |
| 321 | - } | |
| 322 | - this.options = $.extend(this.options, options); | |
| 323 | - | |
| 324 | - // audio DOM | |
| 325 | - _this.elements.audioDom = _this.options.template.find('audio')[0]; | |
| 326 | - // 播放按钮 | |
| 327 | - _this.elements.playButton = _this.options.template.find('.controls_toggle'); | |
| 328 | - // 当前时间 | |
| 329 | - _this.elements.currentTime = _this.options.template.find('.player_mediaTime_current'); | |
| 330 | - // 总时长 | |
| 331 | - _this.elements.totalTime = _this.options.template.find('.player_mediaTime_total'); | |
| 332 | - // 加载进度条 | |
| 333 | - _this.elements.loadProgress = _this.options.template.find('.load_progress'); | |
| 334 | - // 播放进度条 | |
| 335 | - _this.elements.playProgress = _this.options.template.find('.play_progress'); | |
| 336 | - // 播放进度条wrap | |
| 337 | - _this.elements.playProgressWrap = _this.options.template.find('.player_progress'); | |
| 338 | - // 播放进度条总长 | |
| 339 | - _this.elements.totalPlayProgress = _this.options.template.find('.progress_bg'); | |
| 340 | - // 静音按钮 | |
| 341 | - _this.elements.mutedButton = _this.options.template.find('.player_volume'); | |
| 342 | - // 音量大小wrap | |
| 343 | - _this.elements.volumeWrap = _this.options.template.find('.volume_seekbar'); | |
| 344 | - // 音量总长 | |
| 345 | - _this.elements.totalVolume = _this.options.template.find('.volume_bg'); | |
| 346 | - // 当前音量 | |
| 347 | - _this.elements.currentVolume = _this.options.template.find('.volume_level'); | |
| 348 | - // 音量提示条 | |
| 349 | - _this.elements.tipsVolume = _this.options.template.find('.player_volume_tooltip'); | |
| 350 | - $(_this.options.container).append(_this.options.template); | |
| 351 | - | |
| 352 | - if(options.source){ | |
| 353 | - _this.updateSource({source: options.source, callback: function(){ _this.log('update source') }}); | |
| 354 | - } | |
| 355 | - | |
| 356 | - _this.elements.currentVolume.width((60 / 100 * _this.elements.audioDom.volume * 100) + 'px'); | |
| 357 | - | |
| 358 | - // 初始化话事件 | |
| 359 | - _this.events(); | |
| 360 | - }, | |
| 361 | - updateSource: function(o){ | |
| 362 | - var _this = this; | |
| 363 | - // 重置 | |
| 364 | - _this.reset(); | |
| 365 | - | |
| 366 | - // 更新音频来源 | |
| 367 | - _this.elements.audioDom.setAttribute('src', o.source); | |
| 368 | - | |
| 369 | - if(typeof o.callback == 'function'){ | |
| 370 | - o.callback(); | |
| 371 | - } | |
| 372 | - }, | |
| 373 | - events: function() { | |
| 374 | - var _this = this; | |
| 375 | - | |
| 376 | - // 调节声音大小 | |
| 377 | - _this.elements.volumeWrap.on("mouseenter", function(event) { | |
| 378 | - event.preventDefault(); | |
| 379 | - }).on("mouseleave", function(event) { | |
| 380 | - event.preventDefault(); | |
| 381 | - _this.elements.tipsVolume.css('display', 'none'); | |
| 382 | - _this.setvolume(); | |
| 383 | - }).on('mousemove', function(event) { | |
| 384 | - event.preventDefault(); | |
| 385 | - if ((event.pageX - _this.elements.totalVolume.offset().left) > 0 && (event.pageX - _this.elements.totalVolume.offset().left) < (_this.elements.totalVolume.width() + 1)) { | |
| 386 | - _this.elements.tipsVolume.css({ | |
| 387 | - 'display': 'block', | |
| 388 | - "left": parseInt(event.pageX - _this.elements.totalVolume.offset().left + _this.elements.totalVolume.width() / 2 - 40, 10) + "px" | |
| 389 | - }); | |
| 390 | - _this.elements.tipsVolume.find("p").html(_this.sumVolume(event) + " %") | |
| 391 | - _this.elements.currentVolume.width(event.pageX - _this.elements.totalVolume.offset().left + "px"); | |
| 392 | - } | |
| 393 | - }).on('mouseup', function(event) { | |
| 394 | - event.preventDefault(); | |
| 395 | - _this.elements.currentVolume.width(event.pageX - _this.elements.totalVolume.offset().left + "px"); | |
| 396 | - | |
| 397 | - _this.setvolume({ | |
| 398 | - event: event | |
| 399 | - }); | |
| 400 | - }); | |
| 401 | - | |
| 402 | - _this.elements.mutedButton.on('click', function(event) { | |
| 403 | - event.preventDefault(); | |
| 404 | - /* Act on the event */ | |
| 405 | - _this.muted(); | |
| 406 | - }); | |
| 407 | - | |
| 408 | - // 播放进度条 | |
| 409 | - if(_this.options.allowSeek){ | |
| 410 | - _this.elements.playProgressWrap.on('mousedown', function(event) { | |
| 411 | - event.preventDefault(); | |
| 412 | - if (_this.elements.audioDom.paused) { | |
| 413 | - _this.options.seekNum = 1; | |
| 414 | - } else { | |
| 415 | - _this.options.seekNum = 2; | |
| 416 | - _this.pause(); | |
| 417 | - } | |
| 418 | - // 鼠标按下就更新进度条 | |
| 419 | - _this.setPlayProgressWidth(event); | |
| 420 | - }).on('mousemove', function(event) { | |
| 421 | - event.preventDefault(); | |
| 422 | - // 判断是否已经开始移动 才会设置进度条 | |
| 423 | - _this.options.seekNum != 0 && _this.setPlayProgressWidth(event); | |
| 424 | - }).on('mouseup', function(event) { | |
| 425 | - event.preventDefault(); | |
| 426 | - // TODO 是否有必要在鼠标按键抬起的时候再次去更新播放进度条宽度 | |
| 427 | - // _this.setPlayProgressWidth(event); | |
| 428 | - if (_this.options.seekNum == 1) { | |
| 429 | - _this.pause(); | |
| 430 | - } else { | |
| 431 | - _this.play(); | |
| 432 | - } | |
| 433 | - _this.options.seekNum = 0; | |
| 434 | - if(typeof _this.options.seekedCallback == 'function'){ | |
| 435 | - _this.options.seekedCallback({'status': _this.elements.audioDom.seeked}); | |
| 436 | - } | |
| 437 | - }) | |
| 438 | - }else{ | |
| 439 | - _this.elements.playProgressWrap.on('mousedown', function(event) { | |
| 440 | - event.preventDefault(); | |
| 441 | - if(typeof _this.options.seekedCallback == 'function'){ | |
| 442 | - _this.options.seekedCallback(); | |
| 443 | - }else{ | |
| 444 | - alert('暂时不支持拖拽'); | |
| 445 | - return false; | |
| 446 | - } | |
| 447 | - }) | |
| 448 | - } | |
| 449 | - | |
| 450 | - // 播放暂停 | |
| 451 | - _this.elements.playButton.on('click', function(event) { | |
| 452 | - event.preventDefault(); | |
| 453 | - _this.toggleplay({ | |
| 454 | - playCallback: function(){ _this.log('toggleplay:play') }, | |
| 455 | - pauseCallback: function(){ _this.log('toggleplay:pause') } | |
| 456 | - }); | |
| 457 | - }) | |
| 458 | - | |
| 459 | - // 当音频的加载已放弃时 | |
| 460 | - _this.elements.audioDom.onabort = function() { | |
| 461 | - _this.log('onabort'); | |
| 462 | - | |
| 463 | - _this.reset(); | |
| 464 | - } | |
| 465 | - | |
| 466 | - // 当浏览器可以播放音频时 | |
| 467 | - _this.elements.audioDom.oncanplay = function() { | |
| 468 | - _this.log('oncanplay'); | |
| 469 | - // 判断音频加载完毕 | |
| 470 | - if (_this.elements.audioDom.readyState > 0) { | |
| 471 | - var duration = Math.round(_this.elements.audioDom.duration); | |
| 472 | - var minutes = Math.floor(duration / 60); | |
| 473 | - minutes = 10 <= minutes ? minutes : "0" + minutes; | |
| 474 | - duration = Math.floor(duration % 60); | |
| 475 | - | |
| 476 | - _this.elements.totalTime.html(minutes + ":" + (10 <= duration ? duration : "0" + duration)); | |
| 477 | - | |
| 478 | - if(typeof _this.options.canplayCallback == 'function'){ | |
| 479 | - _this.options.canplayCallback({'status': true}); | |
| 480 | - } | |
| 481 | - } | |
| 482 | - } | |
| 483 | - | |
| 484 | - // 当浏览器正在下载音频时 | |
| 485 | - _this.elements.audioDom.onprogress = function() { | |
| 486 | - _this.elements.loadProgress.width((_this.elements.audioDom.buffered.end(0) / _this.elements.audioDom.seekable.end(0)) * _this.elements.totalPlayProgress.width()); | |
| 487 | - }; | |
| 488 | - | |
| 489 | - // 当浏览器开始查找音频时 | |
| 490 | - _this.elements.audioDom.onloadstart = function() { | |
| 491 | - _this.log('onloadstart'); | |
| 492 | - } | |
| 493 | - | |
| 494 | - // 当音频已开始或不再暂停时 | |
| 495 | - _this.elements.audioDom.onplay = function() { | |
| 496 | - _this.log('onplay'); | |
| 497 | - _this.elements.playButton.find('img').attr('src', '../images/pause.png'); | |
| 498 | - } | |
| 499 | - | |
| 500 | - // 当音频已暂停时 | |
| 501 | - _this.elements.audioDom.onpause = function() { | |
| 502 | - _this.log('onpause'); | |
| 503 | - _this.elements.playButton.find('img').attr('src', '../images/play.png'); | |
| 504 | - } | |
| 505 | - | |
| 506 | - // 当目前的播放列表已结束时 | |
| 507 | - _this.elements.audioDom.onended = function() { | |
| 508 | - _this.log('onended'); | |
| 509 | - | |
| 510 | - if(typeof _this.options.endedCallback == 'function'){ | |
| 511 | - _this.options.endedCallback({'status': _this.elements.audioDom.ended}); | |
| 512 | - } | |
| 513 | - } | |
| 514 | - | |
| 515 | - // 当用户开始移动/跳跃到音频中的新位置时 | |
| 516 | - _this.elements.audioDom.onseeking = function() { | |
| 517 | - _this.log('onseeking'); | |
| 518 | - } | |
| 519 | - | |
| 520 | - // 当用户已移动/跳跃到音频中的新位置时 | |
| 521 | - _this.elements.audioDom.onseeked = function() { | |
| 522 | - _this.log('onseeked'); | |
| 523 | - } | |
| 524 | - | |
| 525 | - // 当目前的播放位置已更改时 | |
| 526 | - _this.elements.audioDom.ontimeupdate = function() { | |
| 527 | - _this.log('ontimeupdate'); | |
| 528 | - _this.timeupdate(); | |
| 529 | - } | |
| 530 | - | |
| 531 | - // 当音量已更改时 | |
| 532 | - _this.elements.audioDom.onvolumechange = function() { | |
| 533 | - _this.log('onvolumechange'); | |
| 534 | - _this.setvolume(); | |
| 535 | - } | |
| 536 | - }, | |
| 537 | - toggleplay: function(o) { | |
| 538 | - var _this = this; | |
| 539 | - if (_this.elements.audioDom.paused) { | |
| 540 | - _this.play(o.playCallback); | |
| 541 | - } else { | |
| 542 | - _this.pause(o.pauseCallback); | |
| 543 | - } | |
| 544 | - }, | |
| 545 | - play: function(o) { | |
| 546 | - var _this = this; | |
| 547 | - _this.elements.audioDom.play(); | |
| 548 | - if (typeof o == 'function') { | |
| 549 | - o({'status': _this.elements.audioDom.play}); | |
| 550 | - } | |
| 551 | - | |
| 552 | - if(typeof _this.options.playCallback == 'function'){ | |
| 553 | - _this.options.playCallback({'status': _this.elements.audioDom.play}); | |
| 554 | - } | |
| 555 | - }, | |
| 556 | - pause: function(o) { | |
| 557 | - var _this = this; | |
| 558 | - _this.elements.audioDom.pause(); | |
| 559 | - if (typeof o == 'function') { | |
| 560 | - o({'status': _this.elements.audioDom.play}); | |
| 561 | - } | |
| 562 | - | |
| 563 | - if(typeof _this.options.pauseCallback == 'function'){ | |
| 564 | - _this.options.pauseCallback({'status': _this.elements.audioDom.play}); | |
| 565 | - } | |
| 566 | - }, | |
| 567 | - // 设置静音否 | |
| 568 | - muted: function() { | |
| 569 | - var _this = this; | |
| 570 | - if (_this.elements.audioDom.muted) { | |
| 571 | - _this.elements.audioDom.muted = false; | |
| 572 | - _this.elements.mutedButton.find('img').attr('src', '../images/volume.png'); | |
| 573 | - } else { | |
| 574 | - _this.elements.audioDom.muted = true; | |
| 575 | - _this.elements.mutedButton.find('img').attr('src', '../images/mute.png'); | |
| 576 | - } | |
| 577 | - | |
| 578 | - if(typeof _this.options.mutedCallback == 'function'){ | |
| 579 | - _this.options.mutedCallback({'status': _this.elements.audioDom.muted}); | |
| 580 | - } | |
| 581 | - }, | |
| 582 | - // 设置声音大小 | |
| 583 | - setvolume: function(arguments) { | |
| 584 | - var _this = this; | |
| 585 | - if (!arguments) { | |
| 586 | - _this.elements.currentVolume.width((_this.elements.totalVolume.width() / 100 * _this.elements.audioDom.volume * 100) + 'px'); | |
| 587 | - } else { | |
| 588 | - if (arguments.event) { | |
| 589 | - return _this.elements.audioDom.volume = _this.sumVolume(arguments.event) / 100; | |
| 590 | - } else { | |
| 591 | - // _this.log 需要优化 | |
| 592 | - _this.options.debuggers && console.error('缺少参数:arguments.event'); | |
| 593 | - return false; | |
| 594 | - } | |
| 595 | - } | |
| 596 | - }, | |
| 597 | - // 设置播放进度条 | |
| 598 | - setPlayProgressWidth: function(argument) { | |
| 599 | - var _this = this; | |
| 600 | - if (!argument) { | |
| 601 | - return false; | |
| 602 | - } | |
| 603 | - | |
| 604 | - if ((argument.clientX - _this.elements.playProgressWrap.offset().left) > _this.elements.loadProgress.width()) { | |
| 605 | - _this.elements.playProgress.width(_this.elements.loadProgress.width()); | |
| 606 | - } else { | |
| 607 | - _this.elements.playProgress.width(argument.clientX - _this.elements.playProgressWrap.offset().left); | |
| 608 | - _this.elements.audioDom.currentTime = (argument.clientX - _this.elements.playProgressWrap.offset().left) / _this.elements.totalPlayProgress.width() * _this.elements.audioDom.duration; | |
| 609 | - } | |
| 610 | - }, | |
| 611 | - // 播放时间更改 | |
| 612 | - timeupdate: function() { | |
| 613 | - var _this = this; | |
| 614 | - | |
| 615 | - var currTime = Math.floor(_this.elements.audioDom.currentTime).toString(); | |
| 616 | - var duration = Math.floor(_this.elements.audioDom.duration).toString(); | |
| 617 | - | |
| 618 | - _this.elements.currentTime.html(_this.formatTime(currTime)); | |
| 619 | - | |
| 620 | - if (isNaN(duration)) { | |
| 621 | - _this.elements.totalTime.html('00:00'); | |
| 622 | - } else { | |
| 623 | - _this.elements.totalTime.html(_this.formatTime(duration)); | |
| 624 | - } | |
| 625 | - _this.elements.playProgress.width((_this.elements.audioDom.currentTime / _this.elements.audioDom.duration) * $('.progress_bg').width()); | |
| 626 | - }, | |
| 627 | - // 格式化时间戳相关 | |
| 628 | - formatTime: function(secs, format) { | |
| 629 | - var hr = Math.floor(secs / 3600); | |
| 630 | - var min = Math.floor((secs - (hr * 3600)) / 60); | |
| 631 | - var sec = Math.floor(secs - (hr * 3600) - (min * 60)); | |
| 632 | - | |
| 633 | - if (min < 10) { | |
| 634 | - min = "0" + min; | |
| 635 | - } | |
| 636 | - if (sec < 10) { | |
| 637 | - sec = "0" + sec; | |
| 638 | - } | |
| 639 | - | |
| 640 | - return min + ':' + sec; | |
| 641 | - }, | |
| 642 | - // 计算音量 | |
| 643 | - sumVolume: function(event) { | |
| 644 | - var _this = this; | |
| 645 | - if (!event) { | |
| 646 | - return false; | |
| 647 | - } | |
| 648 | - var num = event.pageX - _this.elements.totalVolume.offset().left; | |
| 649 | - num = Math.max(0, Math.min(1, num / _this.elements.totalVolume.width())); | |
| 650 | - num = parseInt(100 * num, 10); | |
| 651 | - return num; | |
| 652 | - }, | |
| 653 | - // 重置函数 | |
| 654 | - reset: function(){ | |
| 655 | - var _this = this; | |
| 656 | - | |
| 657 | - // 播放按钮 当前播放时间 总时间 音量 播放进度条 下载进度条 | |
| 658 | - _this.elements.playButton.find('img').attr('src', '../images/play.png'); | |
| 659 | - _this.elements.currentTime.html('00:00'); | |
| 660 | - _this.elements.totalTime.html('00:00'); | |
| 661 | - _this.elements.currentVolume.width(_this.elements.totalVolume); | |
| 662 | - _this.elements.playProgress.width(0); | |
| 663 | - _this.elements.loadProgress.width(0); | |
| 664 | - }, | |
| 665 | - log: function(log){ | |
| 666 | - var _this = this; | |
| 667 | - | |
| 668 | - if(_this.options.debuggers){ | |
| 669 | - return console.info(log); | |
| 670 | - } | |
| 671 | - } | |
| 672 | - } | |
| 673 | - $(function() { | |
| 674 | - $('[data-url]').on('click', function(event) { | |
| 675 | - event.preventDefault(); | |
| 676 | - /* Act on the event */ | |
| 677 | - | |
| 678 | - AUDIO.updateSource({ | |
| 679 | - source: $(this).data('url'), | |
| 680 | - callback: function(){ | |
| 681 | - | |
| 682 | - } | |
| 683 | - }); | |
| 684 | - // AUDIO.play(); | |
| 685 | - }); | |
| 686 | - | |
| 687 | - AUDIO.init({ | |
| 688 | - container: '#audioWrap' | |
| 689 | - ,source: './Fade.mp3' | |
| 690 | - ,debuggers: false | |
| 691 | - ,allowSeek: false | |
| 692 | - ,canplayCallback: function(){ console.log('canplayCallback') } | |
| 693 | - ,playCallback: function(){ console.log('playCallback') } | |
| 694 | - ,pauseCallback: function(){ console.log('pauseCallback') } | |
| 695 | - ,seekedCallback: function(){ alert('认真一点了,快进也许会丢失一些精彩'); } | |
| 696 | - ,endedCallback: function(){ console.log('endedCallback') } | |
| 697 | - ,mutedCallback: function(data){ console.log(data) } | |
| 698 | - }); | |
| 699 | - }); | |
| 700 | - </script> | |
| 701 | -</body> | |
| 702 | - | |
| 703 | -</html> |