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> |