From 0eb803efbdebc08efe177b198841f8739633e8af Mon Sep 17 00:00:00 2001 From: DIYgod Date: Mon, 9 May 2016 02:43:13 +0800 Subject: [PATCH] show danmaku --- demo/danmaku.json | 53 ++++++++++++++++ demo/index.html | 3 + dist/DPlayer.min.css | 2 +- dist/DPlayer.min.js | 2 +- dist/DPlayer.min.js.map | 2 +- src/DPlayer.js | 137 +++++++++++++++++++++++++++++++++++----- src/DPlayer.scss | 35 +++++++++- 7 files changed, 213 insertions(+), 21 deletions(-) create mode 100644 demo/danmaku.json diff --git a/demo/danmaku.json b/demo/danmaku.json new file mode 100644 index 0000000..2766ed1 --- /dev/null +++ b/demo/danmaku.json @@ -0,0 +1,53 @@ +{ + "danmaku": [ + { + "author": "DIYgod", + "time": "0.4", + "text": "比♂利比♂利爱1", + "color": "#f00", + "type": "right" + }, + { + "author": "DIYgod", + "time": "0.8", + "text": "比♂利比♂利比♂利爱1.2", + "color": "#0f0", + "type": "right" + }, + { + "author": "DIYgod", + "time": "1.2", + "text": "比♂利比♂利爱1.4比♂利比♂利爱1.4比♂利比♂利爱1.4比♂利比♂利爱1.4比♂利比♂利爱1.4比♂利比♂利爱1.4", + "color": "#00f", + "type": "right" + }, + { + "author": "DIYgod", + "time": "1.6", + "text": "比♂利比♂利爱1.6", + "color": "#ff0", + "type": "right" + }, + { + "author": "DIYgod", + "time": "2.0", + "text": "比♂利比♂利比♂利爱1.8", + "color": "#f0f", + "type": "right" + }, + { + "author": "DIYgod", + "time": "2.4", + "text": "比♂利比♂利比♂利爱2", + "color": "#0ff", + "type": "right" + }, + { + "author": "DIYgod", + "time": "2.8", + "text": "比♂利比♂利爱2.2", + "color": "#f00", + "type": "right" + } + ] +} \ No newline at end of file diff --git a/demo/index.html b/demo/index.html index 70efbcb..3a0d8a3 100644 --- a/demo/index.html +++ b/demo/index.html @@ -63,6 +63,9 @@ video: { url: 'http://o6m1pq7od.bkt.clouddn.com/禁绝的边境线.mp4', pic: 'http://o6m1pq7od.bkt.clouddn.com/禁绝的边境线.jpg' + }, + danmaku: { + get: 'danmaku.json' } }); dp.init(); diff --git a/dist/DPlayer.min.css b/dist/DPlayer.min.css index c1030f3..9d947fc 100644 --- a/dist/DPlayer.min.css +++ b/dist/DPlayer.min.css @@ -1 +1 @@ -.dplayer{position:relative;overflow:hidden}.dplayer:-webkit-full-screen{width:100%;height:100%;background:#000}.dplayer.dplayer-playing .dplayer-controller,.dplayer.dplayer-playing .dplayer-controller-mask{opacity:0}.dplayer.dplayer-playing:hover .dplayer-controller,.dplayer.dplayer-playing:hover .dplayer-controller-mask{opacity:1}.dplayer.dplayer-hide-controller .dplayer-controller,.dplayer.dplayer-hide-controller .dplayer-controller-mask{opacity:0!important}.dplayer .dplayer-video-wrap{background:#000;font-size:0;width:100%;height:100%}.dplayer .dplayer-video-wrap .dplayer-video{width:100%;height:100%}.dplayer .dplayer-danmaku{position:absolute;left:0;right:0;top:0;bottom:0}.dplayer .dplayer-controller-mask{background-repeat:repeat-x;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==);height:98px;width:100%;background-position:bottom}.dplayer .dplayer-controller,.dplayer .dplayer-controller-mask{position:absolute;bottom:0;-webkit-transition:all .3s ease;transition:all .3s ease}.dplayer .dplayer-controller{left:0;right:0;height:41px;padding:0 20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dplayer .dplayer-controller .dplayer-bar-wrap{padding:5px 0;cursor:pointer;position:absolute;bottom:33px;width:calc(100% - 40px);height:3px}.dplayer .dplayer-controller .dplayer-bar-wrap:hover .dplayer-thumb{-webkit-transform:scale(1)!important;-ms-transform:scale(1)!important;transform:scale(1)!important}.dplayer .dplayer-controller .dplayer-bar-wrap .dplayer-bar{position:relative;height:3px;width:100%;background:hsla(0,0%,100%,.2);cursor:pointer!important}.dplayer .dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-loaded{position:absolute;left:0;top:0;bottom:0;background:hsla(0,0%,100%,.4);height:3px;-webkit-transition:all .5s ease;transition:all .5s ease}.dplayer .dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played{position:absolute;left:0;top:0;bottom:0;height:3px}.dplayer .dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played .dplayer-thumb{position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:11px;width:11px;border-radius:50%;cursor:pointer!important;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.dplayer .dplayer-controller .dplayer-icons{height:38px;position:absolute;bottom:0}.dplayer .dplayer-controller .dplayer-icons.dplayer-icons-left .dplayer-icon{padding:7px}.dplayer .dplayer-controller .dplayer-icons.dplayer-icons-right{right:20px}.dplayer .dplayer-controller .dplayer-icons.dplayer-icons-right .dplayer-icon{padding:8px}.dplayer .dplayer-controller .dplayer-icons .dplayer-time{line-height:38px;color:#eee;text-shadow:0 0 2px rgba(0,0,0,.5);vertical-align:middle;font-size:13px;cursor:default}.dplayer .dplayer-controller .dplayer-icons .dplayer-icon{width:46px;height:100%;border:none;background-color:transparent;outline:none;cursor:pointer;opacity:.8;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;vertical-align:middle}.dplayer .dplayer-controller .dplayer-icons .dplayer-icon:hover{opacity:1}.dplayer .dplayer-controller .dplayer-icons .dplayer-svg-shadow{stroke:#000;stroke-opacity:.1;stroke-width:2px;fill:none}.dplayer .dplayer-controller .dplayer-icons .dplayer-fill{fill:#fff}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume{position:relative;display:inline-block;cursor:pointer!important;height:100%}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-volume-bar{width:45px!important}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-thumb{-webkit-transform:scale(1)!important;-ms-transform:scale(1)!important;transform:scale(1)!important}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-volume-bar{width:45px!important}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-thumb{-webkit-transform:scale(1)!important;-ms-transform:scale(1)!important;transform:scale(1)!important}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap{display:inline-block;margin:0 5px 0 -5px;vertical-align:middle;height:100%}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar{position:relative;top:17px;width:0;height:3px;background:#aaa;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner{position:absolute;bottom:0;left:0;height:100%;-webkit-transition:all .1s ease;transition:all .1s ease}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb{position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:11px;width:11px;border-radius:50%;cursor:pointer!important;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting{display:inline-block;height:100%}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box{position:absolute;right:0;bottom:50px;-webkit-transform:translateX(170px);-ms-transform:translateX(170px);transform:translateX(170px);width:150px;height:60px;border-radius:2px;background:rgba(28,28,28,.9);padding:7px 0;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;overflow:hidden}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-open{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-narrow{width:70px;height:180px}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item,.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item{height:30px;padding:5px 10px;box-sizing:border-box;cursor:pointer}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item:hover,.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item:hover{background-color:hsla(0,0%,100%,.1)}.dplayer .dplayer-controller .dplayer-icons .dplayer-label{color:#eee;font-size:13px;display:inline-block;vertical-align:middle}.dplayer .dplayer-controller .dplayer-icons .dplayer-toggle{width:32px;height:100%;text-align:center;display:inline-block;font-size:0;vertical-align:middle;float:right}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle{max-height:0;max-width:0;display:none}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle+label{display:inline-block;position:relative;box-shadow:#dfdfdf 0 0 0 0 inset;border:1px solid #dfdfdf;height:20px;width:32px;border-radius:10px;box-sizing:border-box;cursor:pointer;-webkit-transition:.2s ease-in-out;transition:.2s ease-in-out}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle+label:after,.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle+label:before{content:"";position:absolute;display:block;height:18px;width:18px;top:0;left:0;border-radius:15px;-webkit-transition:.2s ease-in-out;transition:.2s ease-in-out}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle+label:after{background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4)}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle:checked+label{border-color:hsla(0,0%,100%,.5)}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle:checked+label:before{width:30px;background:hsla(0,0%,100%,.5)}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle:checked+label:after{left:12px} \ No newline at end of file +.dplayer{position:relative;overflow:hidden}.dplayer:-webkit-full-screen{width:100%;height:100%;background:#000}.dplayer.dplayer-playing .dplayer-controller,.dplayer.dplayer-playing .dplayer-controller-mask{opacity:0}.dplayer.dplayer-playing .dplayer-danmaku-move{-webkit-animation-play-state:running!important;animation-play-state:running!important}.dplayer.dplayer-playing:hover .dplayer-controller,.dplayer.dplayer-playing:hover .dplayer-controller-mask{opacity:1}.dplayer.dplayer-hide-controller .dplayer-controller,.dplayer.dplayer-hide-controller .dplayer-controller-mask{opacity:0!important}.dplayer .dplayer-video-wrap{position:relative;background:#000;font-size:0;width:100%;height:100%}.dplayer .dplayer-video-wrap .dplayer-video{width:100%;height:100%}.dplayer .dplayer-danmaku{position:absolute;left:0;right:0;top:0;bottom:0;font-size:24px;color:#fff}.dplayer .dplayer-danmaku .dplayer-danmaku-item{display:inline-block;position:absolute;right:0;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default;white-space:nowrap}.dplayer .dplayer-danmaku .dplayer-danmaku-item.dplayer-danmaku-move{will-change:transform;-webkit-animation:a 5s linear;animation:a 5s linear;-webkit-animation-play-state:paused;animation-play-state:paused}@-webkit-keyframes a{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes a{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}}.dplayer .dplayer-controller-mask{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom;height:98px;width:100%}.dplayer .dplayer-controller,.dplayer .dplayer-controller-mask{position:absolute;bottom:0;-webkit-transition:all .3s ease;transition:all .3s ease}.dplayer .dplayer-controller{left:0;right:0;height:41px;padding:0 20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dplayer .dplayer-controller .dplayer-bar-wrap{padding:5px 0;cursor:pointer;position:absolute;bottom:33px;width:calc(100% - 40px);height:3px}.dplayer .dplayer-controller .dplayer-bar-wrap:hover .dplayer-thumb{-webkit-transform:scale(1)!important;-ms-transform:scale(1)!important;transform:scale(1)!important}.dplayer .dplayer-controller .dplayer-bar-wrap .dplayer-bar{position:relative;height:3px;width:100%;background:hsla(0,0%,100%,.2);cursor:pointer!important}.dplayer .dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-loaded{position:absolute;left:0;top:0;bottom:0;background:hsla(0,0%,100%,.4);height:3px;-webkit-transition:all .5s ease;transition:all .5s ease}.dplayer .dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played{position:absolute;left:0;top:0;bottom:0;height:3px}.dplayer .dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played .dplayer-thumb{position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:11px;width:11px;border-radius:50%;cursor:pointer!important;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.dplayer .dplayer-controller .dplayer-icons{height:38px;position:absolute;bottom:0}.dplayer .dplayer-controller .dplayer-icons.dplayer-icons-left .dplayer-icon{padding:7px}.dplayer .dplayer-controller .dplayer-icons.dplayer-icons-right{right:20px}.dplayer .dplayer-controller .dplayer-icons.dplayer-icons-right .dplayer-icon{padding:8px}.dplayer .dplayer-controller .dplayer-icons .dplayer-time{line-height:38px;color:#eee;text-shadow:0 0 2px rgba(0,0,0,.5);vertical-align:middle;font-size:13px;cursor:default}.dplayer .dplayer-controller .dplayer-icons .dplayer-icon{width:46px;height:100%;border:none;background-color:transparent;outline:none;cursor:pointer;opacity:.8;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;vertical-align:middle}.dplayer .dplayer-controller .dplayer-icons .dplayer-icon:hover{opacity:1}.dplayer .dplayer-controller .dplayer-icons .dplayer-svg-shadow{stroke:#000;stroke-opacity:.1;stroke-width:2px;fill:none}.dplayer .dplayer-controller .dplayer-icons .dplayer-fill{fill:#fff}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume{position:relative;display:inline-block;cursor:pointer!important;height:100%}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-volume-bar{width:45px!important}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-thumb{-webkit-transform:scale(1)!important;-ms-transform:scale(1)!important;transform:scale(1)!important}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-volume-bar{width:45px!important}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-thumb{-webkit-transform:scale(1)!important;-ms-transform:scale(1)!important;transform:scale(1)!important}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap{display:inline-block;margin:0 5px 0 -5px;vertical-align:middle;height:100%}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar{position:relative;top:17px;width:0;height:3px;background:#aaa;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner{position:absolute;bottom:0;left:0;height:100%;-webkit-transition:all .1s ease;transition:all .1s ease}.dplayer .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb{position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:11px;width:11px;border-radius:50%;cursor:pointer!important;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting{display:inline-block;height:100%}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box{position:absolute;right:0;bottom:50px;-webkit-transform:translateX(170px);-ms-transform:translateX(170px);transform:translateX(170px);width:150px;height:60px;border-radius:2px;background:rgba(28,28,28,.9);padding:7px 0;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;overflow:hidden}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-open{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-narrow{width:70px;height:180px;text-align:center}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item,.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item{height:30px;padding:5px 10px;box-sizing:border-box;cursor:pointer}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item:hover,.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item:hover{background-color:hsla(0,0%,100%,.1)}.dplayer .dplayer-controller .dplayer-icons .dplayer-label{color:#eee;font-size:13px;display:inline-block;vertical-align:middle}.dplayer .dplayer-controller .dplayer-icons .dplayer-toggle{width:32px;height:100%;text-align:center;display:inline-block;font-size:0;vertical-align:middle;float:right}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle{max-height:0;max-width:0;display:none}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle+label{display:inline-block;position:relative;box-shadow:#dfdfdf 0 0 0 0 inset;border:1px solid #dfdfdf;height:20px;width:32px;border-radius:10px;box-sizing:border-box;cursor:pointer;-webkit-transition:.2s ease-in-out;transition:.2s ease-in-out}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle+label:after,.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle+label:before{content:"";position:absolute;display:block;height:18px;width:18px;top:0;left:0;border-radius:15px;-webkit-transition:.2s ease-in-out;transition:.2s ease-in-out}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle+label:after{background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4)}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle:checked+label{border-color:hsla(0,0%,100%,.5)}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle:checked+label:before{width:30px;background:hsla(0,0%,100%,.5)}.dplayer .dplayer-controller .dplayer-icons input#dplayer-toggle:checked+label:after{left:12px} \ No newline at end of file diff --git a/dist/DPlayer.min.js b/dist/DPlayer.min.js index 8442303..946ca57 100644 --- a/dist/DPlayer.min.js +++ b/dist/DPlayer.min.js @@ -1,2 +1,2 @@ -"use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function e(e,t){for(var n=0;n\n \n \n \n '},this.isMobile=navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i),this.isMobile&&(t.autoplay=!1);var a={element:document.getElementsByClassName("dplayer")[0],autoplay:!1,theme:"#b7daff",loop:!1};for(var s in a)a.hasOwnProperty(s)&&!t.hasOwnProperty(s)&&(t[s]=a[s]);this.option=t,this.loop=t.loop,this.secondToTime=function(e){var t=function(e){return 10>e?"0"+e:""+e},n=parseInt(e/60),a=parseInt(e-60*n);return t(n)+":"+t(a)},this.updateBar=function(e,t,a){t=t>0?t:0,t=1>t?t:1,n[e+"Bar"].style[a]=100*t+"%"},this.eventTypes=["play","pause","canplay","playing","ended","error"],this.event={};var l=!0,i=!1,d=void 0;try{for(var o,r=this.eventTypes[Symbol.iterator]();!(l=(o=r.next()).done);l=!0){var c=o.value;this.event[c]=[]}}catch(u){i=!0,d=u}finally{try{!l&&r["return"]&&r["return"]()}finally{if(i)throw d}}this.trigger=function(e){var t=!0,a=!1,s=void 0;try{for(var l,i=n.event[e][Symbol.iterator]();!(t=(l=i.next()).done);t=!0){var d=l.value;d()}}catch(o){a=!0,s=o}finally{try{!t&&i["return"]&&i["return"]()}finally{if(a)throw s}}}}return _createClass(e,[{key:"init",value:function(){function e(e){for(var t=e.offsetLeft,n=e.offsetParent,a=void 0;null!==n;)t+=n.offsetLeft,n=n.offsetParent;return a=document.body.scrollLeft+document.documentElement.scrollLeft,t-a}var t=this;this.element=this.option.element;var n='\n
\n \n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n
\n
\n 0:00 / 0:00\n
\n
\n
\n \n
\n
\n 洗脑循环\n
\n \n \n
\n
\n
\n 速度\n
'+this.getSVG("right")+'
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n ');this.element.innerHTML=n,this.audio=this.element.getElementsByClassName("dplayer-video")[0];var a=0,s=function(){t.element.classList.remove("dplayer-hide-controller"),clearTimeout(a),a=setTimeout(function(){t.audio.played.length&&t.element.classList.add("dplayer-hide-controller")},2e3)};this.element.addEventListener("mousemove",s),this.element.addEventListener("click",s),this.playButton=this.element.getElementsByClassName("dplayer-play-icon")[0],this.toggle=function(){t.audio.paused?t.play():t.pause()},this.playButton.addEventListener("click",this.toggle),this.element.getElementsByClassName("dplayer-video-wrap")[0].addEventListener("click",this.toggle),this.element.getElementsByClassName("dplayer-controller-mask")[0].addEventListener("click",this.toggle),this.playedBar=this.element.getElementsByClassName("dplayer-played")[0],this.loadedBar=this.element.getElementsByClassName("dplayer-loaded")[0],this.thumb=this.element.getElementsByClassName("dplayer-thumb")[0],this.bar=this.element.getElementsByClassName("dplayer-bar-wrap")[0];var l=void 0;this.bar.addEventListener("click",function(n){var a=n||window.event;l=t.bar.clientWidth;var s=(a.clientX-e(t.bar))/l;s=s>0?s:0,s=1>s?s:1,t.updateBar("played",s,"width"),t.element.getElementsByClassName("dplayer-ptime")[0].innerHTML=t.secondToTime(s*t.audio.duration),t.audio.currentTime=parseFloat(t.playedBar.style.width)/100*t.audio.duration});var i=function(n){var a=n||window.event,s=(a.clientX-e(t.bar))/l;s=s>0?s:0,s=1>s?s:1,t.updateBar("played",s,"width"),t.element.getElementsByClassName("dplayer-ptime")[0].innerHTML=t.secondToTime(s*t.audio.duration)},d=function b(){document.removeEventListener("mouseup",b),document.removeEventListener("mousemove",i),t.audio.currentTime=parseFloat(t.playedBar.style.width)/100*t.audio.duration,t.playedTime=setInterval(function(){t.updateBar("played",t.audio.currentTime/t.audio.duration,"width"),t.element.getElementsByClassName("dplayer-ptime")[0].innerHTML=t.secondToTime(t.audio.currentTime),t.trigger("playing")},100)};this.bar.addEventListener("mousedown",function(){l=t.bar.clientWidth,clearInterval(t.playedTime),document.addEventListener("mousemove",i),document.addEventListener("mouseup",d)}),this.volumeBar=this.element.getElementsByClassName("dplayer-volume-bar-inner")[0];var o=this.element.getElementsByClassName("dplayer-volume")[0],r=this.element.getElementsByClassName("dplayer-volume-bar-wrap")[0],c=this.element.getElementsByClassName("dplayer-volume-bar")[0],u=this.element.getElementsByClassName("dplayer-volume-icon")[0],p=35,m=function(){t.audio.volume>=.8?u.innerHTML=t.getSVG("volume-up"):t.audio.volume>0?u.innerHTML=t.getSVG("volume-down"):u.innerHTML=t.getSVG("volume-off")},v=function(n){var a=n||window.event,s=(a.clientX-e(c)-5.5)/p;s=s>0?s:0,s=1>s?s:1,t.updateBar("volume",s,"width"),t.audio.volume=s,t.audio.muted&&(t.audio.muted=!1),m()},y=function E(){document.removeEventListener("mouseup",E),document.removeEventListener("mousemove",v),o.classList.remove("dplayer-volume-active")};r.addEventListener("click",function(n){var a=n||window.event,s=(a.clientX-e(c)-5.5)/p;s=s>0?s:0,s=1>s?s:1,t.updateBar("volume",s,"width"),t.audio.volume=s,t.audio.muted&&(t.audio.muted=!1),m()}),r.addEventListener("mousedown",function(){document.addEventListener("mousemove",v),document.addEventListener("mouseup",y),o.classList.add("dplayer-volume-active")}),u.addEventListener("click",function(){t.audio.muted?(t.audio.muted=!1,m(),t.updateBar("volume",t.audio.volume,"width")):(t.audio.muted=!0,u.innerHTML=t.getSVG("volume-off"),t.updateBar("volume",0,"width"))});var h=this.element.getElementsByClassName("dplayer-setting-icon")[0],g=this.element.getElementsByClassName("dplayer-setting-box")[0];h.addEventListener("click",function(){g.classList.contains("dplayer-setting-box-open")?g.classList.remove("dplayer-setting-box-open"):g.classList.add("dplayer-setting-box-open")});var f=function L(){var e=t.element.getElementsByClassName("dplayer-setting-loop")[0],n=e.getElementsByClassName("dplayer-toggle-setting-input")[0];e.addEventListener("click",function(){n.checked=!n.checked,n.checked?(t.loop=!0,t.audio.loop=t.loop):(t.loop=!1,t.audio.loop=t.loop)}),n.addEventListener("change",function(){n.checked?(t.loop=!0,t.audio.loop=t.loop):(t.loop=!1,t.audio.loop=t.loop)});var a=g.innerHTML,s=t.element.getElementsByClassName("dplayer-setting-speed")[0];s.addEventListener("click",function(){g.classList.add("dplayer-setting-box-narrow"),g.innerHTML='\n
\n 0.5\n
\n
\n 0.75\n
\n
\n 正常\n
\n
\n 1.25\n
\n
\n 1.5\n
\n
\n 2\n
\n ';for(var e=g.getElementsByClassName("dplayer-setting-speed-item"),n=function(n){e[n].addEventListener("click",function(){t.audio.playbackRate=e[n].dataset.speed,g.classList.remove("dplayer-setting-box-narrow"),setTimeout(function(){g.innerHTML=a,L()},300)})},s=0;s\n \n \n \n '},this.isMobile=navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i),this.isMobile&&(t.autoplay=!1);var a={element:document.getElementsByClassName("dplayer")[0],autoplay:!1,theme:"#b7daff",loop:!1};for(var s in a)a.hasOwnProperty(s)&&!t.hasOwnProperty(s)&&(t[s]=a[s]);this.option=t,this.loop=t.loop,this.secondToTime=function(e){var t=function(e){return 10>e?"0"+e:""+e},n=parseInt(e/60),a=parseInt(e-60*n);return t(n)+":"+t(a)},this.updateBar=function(e,t,a){t=t>0?t:0,t=1>t?t:1,n[e+"Bar"].style[a]=100*t+"%"},this.eventTypes=["play","pause","canplay","playing","ended","error"],this.event={};var i=!0,l=!1,d=void 0;try{for(var o,r=this.eventTypes[Symbol.iterator]();!(i=(o=r.next()).done);i=!0){var c=o.value;this.event[c]=[]}}catch(u){l=!0,d=u}finally{try{!i&&r["return"]&&r["return"]()}finally{if(l)throw d}}this.trigger=function(e){var t=!0,a=!1,s=void 0;try{for(var i,l=n.event[e][Symbol.iterator]();!(t=(i=l.next()).done);t=!0){var d=i.value;d()}}catch(o){a=!0,s=o}finally{try{!t&&l["return"]&&l["return"]()}finally{if(a)throw s}}}}return _createClass(e,[{key:"init",value:function(){function e(e){for(var t=e.offsetLeft,n=e.offsetParent,a=void 0;null!==n;)t+=n.offsetLeft,n=n.offsetParent;return a=document.body.scrollLeft+document.documentElement.scrollLeft,t-a}var t=this;this.element=this.option.element;var n='\n
\n \n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n
\n
\n 0:00 / 0:00\n
\n
\n
\n \n
\n
\n 洗脑循环\n
\n \n \n
\n
\n
\n 速度\n
'+this.getSVG("right")+'
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n ');this.element.innerHTML=n,this.audio=this.element.getElementsByClassName("dplayer-video")[0],this.ptime=this.element.getElementsByClassName("dplayer-ptime")[0];var a=0,s=function(){t.element.classList.remove("dplayer-hide-controller"),clearTimeout(a),a=setTimeout(function(){t.audio.played.length&&t.element.classList.add("dplayer-hide-controller")},2e3)};this.element.addEventListener("mousemove",s),this.element.addEventListener("click",s),this.playButton=this.element.getElementsByClassName("dplayer-play-icon")[0],this.toggle=function(){t.audio.paused?t.play():t.pause()},this.playButton.addEventListener("click",this.toggle),this.element.getElementsByClassName("dplayer-video-wrap")[0].addEventListener("click",this.toggle),this.element.getElementsByClassName("dplayer-controller-mask")[0].addEventListener("click",this.toggle),this.playedBar=this.element.getElementsByClassName("dplayer-played")[0],this.loadedBar=this.element.getElementsByClassName("dplayer-loaded")[0],this.thumb=this.element.getElementsByClassName("dplayer-thumb")[0],this.bar=this.element.getElementsByClassName("dplayer-bar-wrap")[0];var i=void 0;this.bar.addEventListener("click",function(n){var a=n||window.event;i=t.bar.clientWidth;var s=(a.clientX-e(t.bar))/i;s=s>0?s:0,s=1>s?s:1,t.updateBar("played",s,"width"),t.element.getElementsByClassName("dplayer-ptime")[0].innerHTML=t.secondToTime(s*t.audio.duration),t.audio.currentTime=parseFloat(t.playedBar.style.width)/100*t.audio.duration});var l=function(n){var a=n||window.event,s=(a.clientX-e(t.bar))/i;s=s>0?s:0,s=1>s?s:1,t.updateBar("played",s,"width"),t.element.getElementsByClassName("dplayer-ptime")[0].innerHTML=t.secondToTime(s*t.audio.duration)},d=function C(){document.removeEventListener("mouseup",C),document.removeEventListener("mousemove",l),t.audio.currentTime=parseFloat(t.playedBar.style.width)/100*t.audio.duration,t.playedTime=setInterval(function(){t.updateBar("played",t.audio.currentTime/t.audio.duration,"width"),t.element.getElementsByClassName("dplayer-ptime")[0].innerHTML=t.secondToTime(t.audio.currentTime),t.trigger("playing")},100)};this.bar.addEventListener("mousedown",function(){i=t.bar.clientWidth,clearInterval(t.playedTime),document.addEventListener("mousemove",l),document.addEventListener("mouseup",d)}),this.volumeBar=this.element.getElementsByClassName("dplayer-volume-bar-inner")[0];var o=this.element.getElementsByClassName("dplayer-volume")[0],r=this.element.getElementsByClassName("dplayer-volume-bar-wrap")[0],c=this.element.getElementsByClassName("dplayer-volume-bar")[0],u=this.element.getElementsByClassName("dplayer-volume-icon")[0],p=35,m=function(){t.audio.volume>=.8?u.innerHTML=t.getSVG("volume-up"):t.audio.volume>0?u.innerHTML=t.getSVG("volume-down"):u.innerHTML=t.getSVG("volume-off")},v=function(n){var a=n||window.event,s=(a.clientX-e(c)-5.5)/p;s=s>0?s:0,s=1>s?s:1,t.updateBar("volume",s,"width"),t.audio.volume=s,t.audio.muted&&(t.audio.muted=!1),m()},y=function M(){document.removeEventListener("mouseup",M),document.removeEventListener("mousemove",v),o.classList.remove("dplayer-volume-active")};r.addEventListener("click",function(n){var a=n||window.event,s=(a.clientX-e(c)-5.5)/p;s=s>0?s:0,s=1>s?s:1,t.updateBar("volume",s,"width"),t.audio.volume=s,t.audio.muted&&(t.audio.muted=!1),m()}),r.addEventListener("mousedown",function(){document.addEventListener("mousemove",v),document.addEventListener("mouseup",y),o.classList.add("dplayer-volume-active")}),u.addEventListener("click",function(){t.audio.muted?(t.audio.muted=!1,m(),t.updateBar("volume",t.audio.volume,"width")):(t.audio.muted=!0,u.innerHTML=t.getSVG("volume-off"),t.updateBar("volume",0,"width"))});var h=this.element.getElementsByClassName("dplayer-setting-icon")[0],g=this.element.getElementsByClassName("dplayer-setting-box")[0];h.addEventListener("click",function(){g.classList.contains("dplayer-setting-box-open")?g.classList.remove("dplayer-setting-box-open"):g.classList.add("dplayer-setting-box-open")});var f=function N(){var e=t.element.getElementsByClassName("dplayer-setting-loop")[0],n=e.getElementsByClassName("dplayer-toggle-setting-input")[0];e.addEventListener("click",function(){n.checked=!n.checked,n.checked?(t.loop=!0,t.audio.loop=t.loop):(t.loop=!1,t.audio.loop=t.loop),g.classList.remove("dplayer-setting-box-open")}),n.addEventListener("change",function(){n.checked?(t.loop=!0,t.audio.loop=t.loop):(t.loop=!1,t.audio.loop=t.loop),g.classList.remove("dplayer-setting-box-open")});var a=g.innerHTML,s=t.element.getElementsByClassName("dplayer-setting-speed")[0];s.addEventListener("click",function(){g.classList.add("dplayer-setting-box-narrow"),g.innerHTML='\n
\n 0.5\n
\n
\n 0.75\n
\n
\n 正常\n
\n
\n 1.25\n
\n
\n 1.5\n
\n
\n 2\n
';for(var e=g.getElementsByClassName("dplayer-setting-speed-item"),n=function(n){e[n].addEventListener("click",function(){t.audio.playbackRate=e[n].dataset.speed,g.classList.remove("dplayer-setting-box-narrow"),setTimeout(function(){g.innerHTML=a,N()},300),g.classList.remove("dplayer-setting-box-open")})},s=0;s=n;n++){var a=t(n);if("object"===("undefined"==typeof a?"undefined":_typeof(a)))return a.v}};this.danmakuIn=function(e,t,n){var a=document.createElement("div"),s=document.createTextNode(e);a.classList.add("dplayer-danmaku-item"),a.style.color=t,a.appendChild(s),b.appendChild(a),a.style.width=a.offsetWidth+1+"px",a.style.transform="translateX(-"+L+"px)",a.style.top=w*k(a)+"px",a.addEventListener("animationend",function(){b.removeChild(a)}),a.classList.add("dplayer-danmaku-move")},this.option.danmaku?!function(){t.danIndex=0;var e=new XMLHttpRequest;e.onreadystatechange=function(){4===e.readyState&&(e.status>=200&&e.status<300||304===e.status?(t.dan=JSON.parse(e.responseText).danmaku,console.log(t.dan),t.option.autoplay&&!t.isMobile?t.play():t.isMobile&&t.pause()):console.log("Request was unsuccessful: "+e.status))},e.open("get",t.option.danmaku.get,!0),e.send(null)}():this.option.autoplay&&!this.isMobile?this.play():this.isMobile&&this.pause()}},{key:"play",value:function(){var e=this;this.audio.paused&&(this.playButton.innerHTML=this.getSVG("pause"),this.audio.play(),this.playedTime&&clearInterval(this.playedTime),this.option.danmaku?this.playedTime=setInterval(function(){e.updateBar("played",e.audio.currentTime/e.audio.duration,"width"),e.ptime.innerHTML=e.secondToTime(e.audio.currentTime),e.trigger("playing");var t=e.dan[e.danIndex];t&&e.audio.currentTime>=t.time&&(e.danmakuIn(t.text,t.color,t.type),e.danIndex++)},100):this.playedTime=setInterval(function(){e.updateBar("played",e.audio.currentTime/e.audio.duration,"width"),e.ptime.innerHTML=e.secondToTime(e.audio.currentTime),e.trigger("playing")},100),this.element.classList.add("dplayer-playing"),this.trigger("play"))}},{key:"pause",value:function(){this.audio.paused&&!this.ended||(this.ended=!1,this.playButton.innerHTML=this.getSVG("play"),this.audio.pause(),clearInterval(this.playedTime),this.element.classList.remove("dplayer-playing"),this.trigger("pause"))}},{key:"on",value:function(e,t){"function"==typeof t&&this.event[e].push(t)}}]),e}();"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=e:window.DPlayer=e}(); //# sourceMappingURL=DPlayer.min.js.map diff --git a/dist/DPlayer.min.js.map b/dist/DPlayer.min.js.map index 126984b..2fc52d0 100644 --- a/dist/DPlayer.min.js.map +++ b/dist/DPlayer.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["DPlayer.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","DPlayer","option","_this","this","svg","play","pause","volume-up","volume-down","volume-off","loop","full","setting","right","getSVG","type","isMobile","navigator","userAgent","match","autoplay","defaultOption","element","document","getElementsByClassName","theme","defaultKey","hasOwnProperty","secondToTime","second","add0","num","min","parseInt","sec","updateBar","percentage","direction","style","eventTypes","event","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","Symbol","iterator","next","done","value","err","trigger","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","func","getElementViewLeft","actualLeft","offsetLeft","current","offsetParent","elementScrollLeft","body","scrollLeft","documentElement","_this2","eleHTML","video","pic","url","innerHTML","audio","hideTime","hideController","classList","remove","clearTimeout","setTimeout","played","add","addEventListener","playButton","toggle","paused","playedBar","loadedBar","thumb","bar","barWidth","e","window","clientWidth","clientX","duration","currentTime","parseFloat","width","thumbMove","thumbUp","removeEventListener","playedTime","setInterval","clearInterval","volumeBar","volumeEle","volumeBarWrapWrap","volumeBarWrap","volumeicon","vWidth","switchVolumeIcon","volume","volumeMove","muted","volumeUp","settingIcon","settingBox","contains","settingEvent","loopEle","loopToggle","checked","settingBack","speedEle","speedItem","_loop","playbackRate","dataset","speed","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","buffered","end","ended","_this3","name","push","module","exports"],"mappings":"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","file":"DPlayer.min.js","sourcesContent":["(() => {\n\n class DPlayer {\n /**\n * DPlayer constructor function\n *\n * @param {Object} option - See README\n * @constructor\n */\n constructor(option) {\n this.svg = {\n 'play': ['0 0 16 32', 'M15.552 15.168q0.448 0.32 0.448 0.832 0 0.448-0.448 0.768l-13.696 8.512q-0.768 0.512-1.312 0.192t-0.544-1.28v-16.448q0-0.96 0.544-1.28t1.312 0.192z'],\n 'pause': ['0 0 17 32', 'M14.080 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048zM2.88 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048z'],\n 'volume-up': ['0 0 21 32', 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528zM25.152 16q0 2.72-1.536 5.056t-4 3.36q-0.256 0.096-0.448 0.096-0.48 0-0.832-0.352t-0.32-0.8q0-0.704 0.672-1.056 1.024-0.512 1.376-0.8 1.312-0.96 2.048-2.4t0.736-3.104-0.736-3.104-2.048-2.4q-0.352-0.288-1.376-0.8-0.672-0.352-0.672-1.056 0-0.448 0.32-0.8t0.8-0.352q0.224 0 0.48 0.096 2.496 1.056 4 3.36t1.536 5.056zM29.728 16q0 4.096-2.272 7.552t-6.048 5.056q-0.224 0.096-0.448 0.096-0.48 0-0.832-0.352t-0.32-0.8q0-0.64 0.704-1.056 0.128-0.064 0.384-0.192t0.416-0.192q0.8-0.448 1.44-0.896 2.208-1.632 3.456-4.064t1.216-5.152-1.216-5.152-3.456-4.064q-0.64-0.448-1.44-0.896-0.128-0.096-0.416-0.192t-0.384-0.192q-0.704-0.416-0.704-1.056 0-0.448 0.32-0.8t0.832-0.352q0.224 0 0.448 0.096 3.776 1.632 6.048 5.056t2.272 7.552z'],\n 'volume-down': ['0 0 21 32', 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528z'],\n 'volume-off': ['0 0 21 32', 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8z'],\n 'loop': ['0 0 32 32', 'M1.882 16.941c0 4.152 3.221 7.529 7.177 7.529v1.882c-4.996 0-9.060-4.222-9.060-9.412s4.064-9.412 9.060-9.412h7.96l-3.098-3.098 1.331-1.331 5.372 5.37-5.37 5.372-1.333-1.333 3.1-3.098h-7.962c-3.957 0-7.177 3.377-7.177 7.529zM22.94 7.529v1.882c3.957 0 7.177 3.377 7.177 7.529s-3.221 7.529-7.177 7.529h-7.962l3.098-3.098-1.331-1.331-5.37 5.37 5.372 5.372 1.331-1.331-3.1-3.1h7.96c4.998 0 9.062-4.222 9.062-9.412s-4.064-9.412-9.060-9.412z'],\n 'full': ['0 0 32 33', 'M6.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v4h4c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333zM30.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h4v-4c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM30.667 12c-0.8 0-1.333-0.533-1.333-1.333v-4h-4c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM1.333 12c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333h-4v4c0 0.8-0.533 1.333-1.333 1.333z'],\n 'setting': ['0 0 32 29', 'M28.633 17.104c0.035 0.21 0.026 0.463-0.026 0.76s-0.14 0.598-0.262 0.904c-0.122 0.306-0.271 0.581-0.445 0.825s-0.367 0.419-0.576 0.524c-0.209 0.105-0.393 0.157-0.55 0.157s-0.332-0.035-0.524-0.105c-0.175-0.052-0.393-0.1-0.655-0.144s-0.528-0.052-0.799-0.026c-0.271 0.026-0.541 0.083-0.812 0.17s-0.502 0.236-0.694 0.445c-0.419 0.437-0.664 0.934-0.734 1.493s0.009 1.092 0.236 1.598c0.175 0.349 0.148 0.699-0.079 1.048-0.105 0.14-0.271 0.284-0.498 0.432s-0.476 0.284-0.747 0.406-0.555 0.218-0.851 0.288c-0.297 0.070-0.559 0.105-0.786 0.105-0.157 0-0.306-0.061-0.445-0.183s-0.236-0.253-0.288-0.393h-0.026c-0.192-0.541-0.52-1.009-0.982-1.402s-1-0.589-1.611-0.589c-0.594 0-1.131 0.197-1.611 0.589s-0.816 0.851-1.009 1.375c-0.087 0.21-0.218 0.362-0.393 0.458s-0.367 0.144-0.576 0.144c-0.244 0-0.52-0.044-0.825-0.131s-0.611-0.197-0.917-0.327c-0.306-0.131-0.581-0.284-0.825-0.458s-0.428-0.349-0.55-0.524c-0.087-0.122-0.135-0.266-0.144-0.432s0.057-0.397 0.197-0.694c0.192-0.402 0.266-0.86 0.223-1.375s-0.266-0.991-0.668-1.428c-0.244-0.262-0.541-0.432-0.891-0.511s-0.681-0.109-0.995-0.092c-0.367 0.017-0.742 0.087-1.127 0.21-0.244 0.070-0.489 0.052-0.734-0.052-0.192-0.070-0.371-0.231-0.537-0.485s-0.314-0.533-0.445-0.838c-0.131-0.306-0.231-0.62-0.301-0.943s-0.087-0.59-0.052-0.799c0.052-0.384 0.227-0.629 0.524-0.734 0.524-0.21 0.995-0.555 1.415-1.035s0.629-1.017 0.629-1.611c0-0.611-0.21-1.144-0.629-1.598s-0.891-0.786-1.415-0.996c-0.157-0.052-0.288-0.179-0.393-0.38s-0.157-0.406-0.157-0.616c0-0.227 0.035-0.48 0.105-0.76s0.162-0.55 0.275-0.812 0.244-0.502 0.393-0.72c0.148-0.218 0.31-0.38 0.485-0.485 0.14-0.087 0.275-0.122 0.406-0.105s0.275 0.052 0.432 0.105c0.524 0.21 1.070 0.275 1.637 0.197s1.070-0.327 1.506-0.747c0.21-0.209 0.362-0.467 0.458-0.773s0.157-0.607 0.183-0.904c0.026-0.297 0.026-0.568 0-0.812s-0.048-0.419-0.065-0.524c-0.035-0.105-0.066-0.227-0.092-0.367s-0.013-0.262 0.039-0.367c0.105-0.244 0.293-0.458 0.563-0.642s0.563-0.336 0.878-0.458c0.314-0.122 0.62-0.214 0.917-0.275s0.533-0.092 0.707-0.092c0.227 0 0.406 0.074 0.537 0.223s0.223 0.301 0.275 0.458c0.192 0.471 0.507 0.886 0.943 1.244s0.952 0.537 1.546 0.537c0.611 0 1.153-0.17 1.624-0.511s0.803-0.773 0.996-1.297c0.070-0.14 0.179-0.284 0.327-0.432s0.301-0.223 0.458-0.223c0.244 0 0.511 0.035 0.799 0.105s0.572 0.166 0.851 0.288c0.279 0.122 0.537 0.279 0.773 0.472s0.423 0.402 0.563 0.629c0.087 0.14 0.113 0.293 0.079 0.458s-0.070 0.284-0.105 0.354c-0.227 0.506-0.297 1.039-0.21 1.598s0.341 1.048 0.76 1.467c0.419 0.419 0.934 0.651 1.546 0.694s1.179-0.057 1.703-0.301c0.14-0.087 0.31-0.122 0.511-0.105s0.371 0.096 0.511 0.236c0.262 0.244 0.493 0.616 0.694 1.113s0.336 1 0.406 1.506c0.035 0.297-0.013 0.528-0.144 0.694s-0.266 0.275-0.406 0.327c-0.542 0.192-1.004 0.528-1.388 1.009s-0.576 1.026-0.576 1.637c0 0.594 0.162 1.113 0.485 1.559s0.747 0.764 1.27 0.956c0.122 0.070 0.227 0.14 0.314 0.21 0.192 0.157 0.323 0.358 0.393 0.602v0zM16.451 19.462c0.786 0 1.528-0.149 2.227-0.445s1.305-0.707 1.821-1.231c0.515-0.524 0.921-1.131 1.218-1.821s0.445-1.428 0.445-2.214c0-0.786-0.148-1.524-0.445-2.214s-0.703-1.292-1.218-1.808c-0.515-0.515-1.122-0.921-1.821-1.218s-1.441-0.445-2.227-0.445c-0.786 0-1.524 0.148-2.214 0.445s-1.292 0.703-1.808 1.218c-0.515 0.515-0.921 1.118-1.218 1.808s-0.445 1.428-0.445 2.214c0 0.786 0.149 1.524 0.445 2.214s0.703 1.297 1.218 1.821c0.515 0.524 1.118 0.934 1.808 1.231s1.428 0.445 2.214 0.445v0z'],\n 'right': ['0 0 32 32', 'M22 16l-10.105-10.6-1.895 1.987 8.211 8.613-8.211 8.612 1.895 1.988 8.211-8.613z']\n };\n this.getSVG = (type) => {\n return `\n \n \n \n \n `;\n };\n\n this.isMobile = navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i);\n // compatibility: some mobile browsers don't suppose autoplay\n if (this.isMobile) {\n option.autoplay = false;\n }\n\n // default options\n const defaultOption = {\n element: document.getElementsByClassName('dplayer')[0],\n autoplay: false,\n theme: '#b7daff',\n loop: false\n };\n for (let defaultKey in defaultOption) {\n if (defaultOption.hasOwnProperty(defaultKey) && !option.hasOwnProperty(defaultKey)) {\n option[defaultKey] = defaultOption[defaultKey];\n }\n }\n\n this.option = option;\n this.loop = option.loop;\n\n /**\n * Parse second to 00:00 format\n *\n * @param {Number} second\n * @return {String} 00:00 format\n */\n this.secondToTime = (second) => {\n const add0 = (num) => {\n return num < 10 ? '0' + num : '' + num;\n };\n const min = parseInt(second / 60);\n const sec = parseInt(second - min * 60);\n return add0(min) + ':' + add0(sec);\n };\n\n /**\n * Update progress bar, including loading progress bar and play progress bar\n *\n * @param {String} type - Point out which bar it is, should be played loaded or volume\n * @param {Number} percentage\n * @param {String} direction - Point out the direction of this bar, Should be height or width\n */\n this.updateBar = (type, percentage, direction) => {\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this[type + 'Bar'].style[direction] = percentage * 100 + '%';\n };\n\n // define DPlayer events\n this.eventTypes = ['play', 'pause', 'canplay', 'playing', 'ended', 'error'];\n this.event = {};\n for (let type of this.eventTypes) {\n this.event[type] = [];\n }\n this.trigger = (type) => {\n for (let func of this.event[type]) {\n func();\n }\n }\n };\n\n /**\n * AutoLink initialization function\n */\n init() {\n this.element = this.option.element;\n\n let eleHTML = `\n
\n \n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n
\n
\n 0:00 / 0:00\n
\n
\n
\n \n
\n
\n 洗脑循环\n
\n \n \n
\n
\n
\n 速度\n
`\n + this.getSVG('right')\n + `
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n `;\n this.element.innerHTML = eleHTML;\n\n // get this audio object\n this.audio = this.element.getElementsByClassName('dplayer-video')[0];\n\n // hide controller if mouse stops for 2 seconds\n let hideTime = 0;\n const hideController = () => {\n this.element.classList.remove('dplayer-hide-controller');\n clearTimeout(hideTime);\n hideTime = setTimeout(() => {\n if (this.audio.played.length) {\n this.element.classList.add('dplayer-hide-controller');\n }\n }, 2000);\n };\n this.element.addEventListener('mousemove', hideController);\n this.element.addEventListener('click', hideController);\n\n // play and pause button\n this.playButton = this.element.getElementsByClassName('dplayer-play-icon')[0];\n this.toggle = () => {\n if (this.audio.paused) {\n this.play();\n }\n else {\n this.pause();\n }\n };\n this.playButton.addEventListener('click', this.toggle);\n this.element.getElementsByClassName('dplayer-video-wrap')[0].addEventListener('click', this.toggle);\n this.element.getElementsByClassName('dplayer-controller-mask')[0].addEventListener('click', this.toggle);\n\n // control play progress\n this.playedBar = this.element.getElementsByClassName('dplayer-played')[0];\n this.loadedBar = this.element.getElementsByClassName('dplayer-loaded')[0];\n this.thumb = this.element.getElementsByClassName('dplayer-thumb')[0];\n this.bar = this.element.getElementsByClassName('dplayer-bar-wrap')[0];\n let barWidth;\n this.bar.addEventListener('click', (event) => {\n const e = event || window.event;\n barWidth = this.bar.clientWidth;\n let percentage = (e.clientX - getElementViewLeft(this.bar)) / barWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('played', percentage, 'width');\n this.element.getElementsByClassName('dplayer-ptime')[0].innerHTML = this.secondToTime(percentage * this.audio.duration);\n this.audio.currentTime = parseFloat(this.playedBar.style.width) / 100 * this.audio.duration;\n });\n\n const thumbMove = (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(this.bar)) / barWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('played', percentage, 'width');\n this.element.getElementsByClassName('dplayer-ptime')[0].innerHTML = this.secondToTime(percentage * this.audio.duration);\n };\n\n const thumbUp = () => {\n document.removeEventListener('mouseup', thumbUp);\n document.removeEventListener('mousemove', thumbMove);\n this.audio.currentTime = parseFloat(this.playedBar.style.width) / 100 * this.audio.duration;\n this.playedTime = setInterval(() => {\n this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width');\n this.element.getElementsByClassName('dplayer-ptime')[0].innerHTML = this.secondToTime(this.audio.currentTime);\n this.trigger('playing');\n }, 100);\n };\n\n this.bar.addEventListener('mousedown', () => {\n barWidth = this.bar.clientWidth;\n clearInterval(this.playedTime);\n document.addEventListener('mousemove', thumbMove);\n document.addEventListener('mouseup', thumbUp);\n });\n\n // control volume\n this.volumeBar = this.element.getElementsByClassName('dplayer-volume-bar-inner')[0];\n const volumeEle = this.element.getElementsByClassName('dplayer-volume')[0];\n const volumeBarWrapWrap = this.element.getElementsByClassName('dplayer-volume-bar-wrap')[0];\n const volumeBarWrap = this.element.getElementsByClassName('dplayer-volume-bar')[0];\n const volumeicon = this.element.getElementsByClassName('dplayer-volume-icon')[0];\n const vWidth = 35;\n const switchVolumeIcon = () => {\n if (this.audio.volume >= 0.8) {\n volumeicon.innerHTML = this.getSVG('volume-up');\n }\n else if (this.audio.volume > 0) {\n volumeicon.innerHTML = this.getSVG('volume-down');\n }\n else {\n volumeicon.innerHTML = this.getSVG('volume-off');\n }\n };\n const volumeMove = (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(volumeBarWrap) - 5.5) / vWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('volume', percentage, 'width');\n this.audio.volume = percentage;\n if (this.audio.muted) {\n this.audio.muted = false;\n }\n switchVolumeIcon();\n };\n const volumeUp = () => {\n document.removeEventListener('mouseup', volumeUp);\n document.removeEventListener('mousemove', volumeMove);\n volumeEle.classList.remove('dplayer-volume-active');\n };\n\n volumeBarWrapWrap.addEventListener('click', (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(volumeBarWrap) - 5.5) / vWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('volume', percentage, 'width');\n this.audio.volume = percentage;\n if (this.audio.muted) {\n this.audio.muted = false;\n }\n switchVolumeIcon();\n });\n volumeBarWrapWrap.addEventListener('mousedown', () => {\n document.addEventListener('mousemove', volumeMove);\n document.addEventListener('mouseup', volumeUp);\n volumeEle.classList.add('dplayer-volume-active');\n });\n volumeicon.addEventListener('click', () => {\n if (this.audio.muted) {\n this.audio.muted = false;\n switchVolumeIcon();\n this.updateBar('volume', this.audio.volume, 'width');\n }\n else {\n this.audio.muted = true;\n volumeicon.innerHTML = this.getSVG('volume-off');\n this.updateBar('volume', 0, 'width');\n }\n });\n\n // get element's view position\n function getElementViewLeft(element) {\n let actualLeft = element.offsetLeft;\n let current = element.offsetParent;\n let elementScrollLeft;\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n return actualLeft - elementScrollLeft;\n }\n\n function getElementViewTop(element) {\n let actualTop = element.offsetTop;\n let current = element.offsetParent;\n let elementScrollTop;\n while (current !== null) {\n actualTop += current.offsetTop;\n current = current.offsetParent;\n }\n elementScrollTop = document.body.scrollTop + document.documentElement.scrollTop;\n return actualTop - elementScrollTop;\n }\n\n // toggle setting box\n const settingIcon = this.element.getElementsByClassName('dplayer-setting-icon')[0];\n const settingBox = this.element.getElementsByClassName('dplayer-setting-box')[0];\n settingIcon.addEventListener('click', () => {\n if (settingBox.classList.contains('dplayer-setting-box-open')) {\n settingBox.classList.remove('dplayer-setting-box-open')\n }\n else {\n settingBox.classList.add('dplayer-setting-box-open')\n }\n });\n\n // setting\n const settingEvent = () => {\n // loop control\n const loopEle = this.element.getElementsByClassName('dplayer-setting-loop')[0];\n const loopToggle = loopEle.getElementsByClassName('dplayer-toggle-setting-input')[0];\n loopEle.addEventListener('click', () => {\n loopToggle.checked = !loopToggle.checked;\n if (loopToggle.checked) {\n this.loop = true;\n this.audio.loop = this.loop;\n }\n else {\n this.loop = false;\n this.audio.loop = this.loop;\n }\n });\n loopToggle.addEventListener('change', () => {\n if (loopToggle.checked) {\n this.loop = true;\n this.audio.loop = this.loop;\n }\n else {\n this.loop = false;\n this.audio.loop = this.loop;\n }\n });\n\n // speed control\n const settingBack = settingBox.innerHTML;\n const speedEle = this.element.getElementsByClassName('dplayer-setting-speed')[0];\n speedEle.addEventListener('click', () => {\n settingBox.classList.add('dplayer-setting-box-narrow');\n settingBox.innerHTML = `\n
\n 0.5\n
\n
\n 0.75\n
\n
\n 正常\n
\n
\n 1.25\n
\n
\n 1.5\n
\n
\n 2\n
\n `;\n const speedItem = settingBox.getElementsByClassName('dplayer-setting-speed-item');\n for (let i = 0; i < speedItem.length; i++) {\n speedItem[i].addEventListener('click', () => {\n this.audio.playbackRate = speedItem[i].dataset.speed;\n settingBox.classList.remove('dplayer-setting-box-narrow');\n setTimeout(() => {\n settingBox.innerHTML = settingBack;\n settingEvent();\n }, 300);\n });\n }\n });\n };\n settingEvent();\n\n // full screen\n this.element.getElementsByClassName('dplayer-full-icon')[0].addEventListener('click', () => {\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n if (this.element.requestFullscreen) {\n this.element.requestFullscreen();\n }\n else if (this.element.mozRequestFullScreen) {\n this.element.mozRequestFullScreen();\n }\n else if (this.element.webkitRequestFullscreen) {\n this.element.webkitRequestFullscreen();\n }\n } else {\n if (document.cancelFullScreen) {\n document.cancelFullScreen();\n }\n else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n }\n else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n }\n }\n });\n\n // show audio time: the metadata has loaded or changed\n this.audio.addEventListener('durationchange', () => {\n if (this.audio.duration !== 1) { // compatibility: Android browsers will output 1 at first\n this.element.getElementsByClassName('dplayer-dtime')[0].innerHTML = this.secondToTime(this.audio.duration);\n }\n });\n\n // show audio loaded bar: to inform interested parties of progress downloading the media\n this.audio.addEventListener('progress', () => {\n const percentage = this.audio.buffered.length ? this.audio.buffered.end(this.audio.buffered.length - 1) / this.audio.duration : 0;\n this.updateBar('loaded', percentage, 'width');\n });\n\n // audio download error: an error occurs\n this.audio.addEventListener('error', () => {\n this.element.getElementsByClassName('dplayer-ptime')[0].innerHTML = `Error happens ╥﹏╥`;\n this.trigger('pause');\n });\n\n // audio can play: enough data is available that the media can be played\n this.audio.addEventListener('canplay', () => {\n this.trigger('canplay');\n });\n\n // multiple music play\n this.ended = false;\n this.audio.addEventListener('ended', () => {\n this.updateBar('played', 1, 'width');\n if (!this.loop) {\n this.ended = true;\n this.pause();\n this.trigger('ended');\n }\n });\n\n // control volume\n this.audio.volume = parseInt(this.element.getElementsByClassName('dplayer-volume-bar-inner')[0].style.width) / 100;\n\n // loop\n this.audio.loop = this.loop;\n\n // set duration time\n if (this.audio.duration !== 1) { // compatibility: Android browsers will output 1 at first\n this.element.getElementsByClassName('dplayer-dtime')[0].innerHTML = this.audio.duration ? this.secondToTime(this.audio.duration) : '00:00';\n }\n\n // autoplay\n if (this.option.autoplay && !this.isMobile) {\n this.play();\n }\n this.option.autoplay = true; // autoplay next music\n\n if (this.isMobile) {\n this.pause();\n }\n }\n\n /**\n * Play music\n */\n play() {\n if (this.audio.paused) {\n this.playButton.innerHTML = this.getSVG('pause');\n\n this.audio.play();\n if (this.playedTime) {\n clearInterval(this.playedTime);\n }\n this.playedTime = setInterval(() => {\n this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width');\n this.element.getElementsByClassName('dplayer-ptime')[0].innerHTML = this.secondToTime(this.audio.currentTime);\n this.trigger('playing');\n }, 100);\n this.element.classList.add('dplayer-playing');\n this.trigger('play');\n }\n }\n\n /**\n * Pause music\n */\n pause() {\n if (!this.audio.paused || this.ended) {\n this.ended = false;\n this.playButton.innerHTML = this.getSVG('play');\n this.audio.pause();\n clearInterval(this.playedTime);\n this.element.classList.remove('dplayer-playing');\n this.trigger('pause');\n }\n }\n\n /**\n * attach event\n */\n on(name, func) {\n if (typeof func === 'function') {\n this.event[name].push(func);\n }\n }\n}\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = DPlayer\n}\nelse {\n window.DPlayer = DPlayer;\n}\n})();"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["DPlayer.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_typeof","Symbol","iterator","obj","constructor","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","DPlayer","option","_this","this","svg","play","pause","volume-up","volume-down","volume-off","loop","full","setting","right","getSVG","type","isMobile","navigator","userAgent","match","autoplay","defaultOption","element","document","getElementsByClassName","theme","defaultKey","hasOwnProperty","secondToTime","second","add0","num","min","parseInt","sec","updateBar","percentage","direction","style","eventTypes","event","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","next","done","value","err","trigger","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","func","getElementViewLeft","actualLeft","offsetLeft","current","offsetParent","elementScrollLeft","body","scrollLeft","documentElement","_this2","eleHTML","video","pic","url","innerHTML","audio","ptime","hideTime","hideController","classList","remove","clearTimeout","setTimeout","played","add","addEventListener","playButton","toggle","paused","playedBar","loadedBar","thumb","bar","barWidth","e","window","clientWidth","clientX","duration","currentTime","parseFloat","width","thumbMove","thumbUp","removeEventListener","playedTime","setInterval","clearInterval","volumeBar","volumeEle","volumeBarWrapWrap","volumeBarWrap","volumeicon","vWidth","switchVolumeIcon","volume","volumeMove","muted","volumeUp","settingIcon","settingBox","contains","settingEvent","loopEle","loopToggle","checked","settingBack","speedEle","speedItem","_loop","playbackRate","dataset","speed","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","buffered","end","ended","danContainer","danWidth","offsetWidth","danHeight","offsetHeight","itemHeight","itemY","danTunnel","danItemRight","ele","getBoundingClientRect","getTunnel","_loop2","item","splice","v","j","push","_ret2","danmakuIn","text","color","createElement","content","createTextNode","appendChild","transform","top","removeChild","danmaku","danIndex","xhr","XMLHttpRequest","onreadystatechange","readyState","status","dan","JSON","parse","responseText","console","log","open","get","send","_this3","time","name","module","exports"],"mappings":"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","file":"DPlayer.min.js","sourcesContent":["(() => {\n\n class DPlayer {\n /**\n * DPlayer constructor function\n *\n * @param {Object} option - See README\n * @constructor\n */\n constructor(option) {\n this.svg = {\n 'play': ['0 0 16 32', 'M15.552 15.168q0.448 0.32 0.448 0.832 0 0.448-0.448 0.768l-13.696 8.512q-0.768 0.512-1.312 0.192t-0.544-1.28v-16.448q0-0.96 0.544-1.28t1.312 0.192z'],\n 'pause': ['0 0 17 32', 'M14.080 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048zM2.88 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048z'],\n 'volume-up': ['0 0 21 32', 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528zM25.152 16q0 2.72-1.536 5.056t-4 3.36q-0.256 0.096-0.448 0.096-0.48 0-0.832-0.352t-0.32-0.8q0-0.704 0.672-1.056 1.024-0.512 1.376-0.8 1.312-0.96 2.048-2.4t0.736-3.104-0.736-3.104-2.048-2.4q-0.352-0.288-1.376-0.8-0.672-0.352-0.672-1.056 0-0.448 0.32-0.8t0.8-0.352q0.224 0 0.48 0.096 2.496 1.056 4 3.36t1.536 5.056zM29.728 16q0 4.096-2.272 7.552t-6.048 5.056q-0.224 0.096-0.448 0.096-0.48 0-0.832-0.352t-0.32-0.8q0-0.64 0.704-1.056 0.128-0.064 0.384-0.192t0.416-0.192q0.8-0.448 1.44-0.896 2.208-1.632 3.456-4.064t1.216-5.152-1.216-5.152-3.456-4.064q-0.64-0.448-1.44-0.896-0.128-0.096-0.416-0.192t-0.384-0.192q-0.704-0.416-0.704-1.056 0-0.448 0.32-0.8t0.832-0.352q0.224 0 0.448 0.096 3.776 1.632 6.048 5.056t2.272 7.552z'],\n 'volume-down': ['0 0 21 32', 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528z'],\n 'volume-off': ['0 0 21 32', 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8z'],\n 'loop': ['0 0 32 32', 'M1.882 16.941c0 4.152 3.221 7.529 7.177 7.529v1.882c-4.996 0-9.060-4.222-9.060-9.412s4.064-9.412 9.060-9.412h7.96l-3.098-3.098 1.331-1.331 5.372 5.37-5.37 5.372-1.333-1.333 3.1-3.098h-7.962c-3.957 0-7.177 3.377-7.177 7.529zM22.94 7.529v1.882c3.957 0 7.177 3.377 7.177 7.529s-3.221 7.529-7.177 7.529h-7.962l3.098-3.098-1.331-1.331-5.37 5.37 5.372 5.372 1.331-1.331-3.1-3.1h7.96c4.998 0 9.062-4.222 9.062-9.412s-4.064-9.412-9.060-9.412z'],\n 'full': ['0 0 32 33', 'M6.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v4h4c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333zM30.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h4v-4c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM30.667 12c-0.8 0-1.333-0.533-1.333-1.333v-4h-4c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM1.333 12c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333h-4v4c0 0.8-0.533 1.333-1.333 1.333z'],\n 'setting': ['0 0 32 29', 'M28.633 17.104c0.035 0.21 0.026 0.463-0.026 0.76s-0.14 0.598-0.262 0.904c-0.122 0.306-0.271 0.581-0.445 0.825s-0.367 0.419-0.576 0.524c-0.209 0.105-0.393 0.157-0.55 0.157s-0.332-0.035-0.524-0.105c-0.175-0.052-0.393-0.1-0.655-0.144s-0.528-0.052-0.799-0.026c-0.271 0.026-0.541 0.083-0.812 0.17s-0.502 0.236-0.694 0.445c-0.419 0.437-0.664 0.934-0.734 1.493s0.009 1.092 0.236 1.598c0.175 0.349 0.148 0.699-0.079 1.048-0.105 0.14-0.271 0.284-0.498 0.432s-0.476 0.284-0.747 0.406-0.555 0.218-0.851 0.288c-0.297 0.070-0.559 0.105-0.786 0.105-0.157 0-0.306-0.061-0.445-0.183s-0.236-0.253-0.288-0.393h-0.026c-0.192-0.541-0.52-1.009-0.982-1.402s-1-0.589-1.611-0.589c-0.594 0-1.131 0.197-1.611 0.589s-0.816 0.851-1.009 1.375c-0.087 0.21-0.218 0.362-0.393 0.458s-0.367 0.144-0.576 0.144c-0.244 0-0.52-0.044-0.825-0.131s-0.611-0.197-0.917-0.327c-0.306-0.131-0.581-0.284-0.825-0.458s-0.428-0.349-0.55-0.524c-0.087-0.122-0.135-0.266-0.144-0.432s0.057-0.397 0.197-0.694c0.192-0.402 0.266-0.86 0.223-1.375s-0.266-0.991-0.668-1.428c-0.244-0.262-0.541-0.432-0.891-0.511s-0.681-0.109-0.995-0.092c-0.367 0.017-0.742 0.087-1.127 0.21-0.244 0.070-0.489 0.052-0.734-0.052-0.192-0.070-0.371-0.231-0.537-0.485s-0.314-0.533-0.445-0.838c-0.131-0.306-0.231-0.62-0.301-0.943s-0.087-0.59-0.052-0.799c0.052-0.384 0.227-0.629 0.524-0.734 0.524-0.21 0.995-0.555 1.415-1.035s0.629-1.017 0.629-1.611c0-0.611-0.21-1.144-0.629-1.598s-0.891-0.786-1.415-0.996c-0.157-0.052-0.288-0.179-0.393-0.38s-0.157-0.406-0.157-0.616c0-0.227 0.035-0.48 0.105-0.76s0.162-0.55 0.275-0.812 0.244-0.502 0.393-0.72c0.148-0.218 0.31-0.38 0.485-0.485 0.14-0.087 0.275-0.122 0.406-0.105s0.275 0.052 0.432 0.105c0.524 0.21 1.070 0.275 1.637 0.197s1.070-0.327 1.506-0.747c0.21-0.209 0.362-0.467 0.458-0.773s0.157-0.607 0.183-0.904c0.026-0.297 0.026-0.568 0-0.812s-0.048-0.419-0.065-0.524c-0.035-0.105-0.066-0.227-0.092-0.367s-0.013-0.262 0.039-0.367c0.105-0.244 0.293-0.458 0.563-0.642s0.563-0.336 0.878-0.458c0.314-0.122 0.62-0.214 0.917-0.275s0.533-0.092 0.707-0.092c0.227 0 0.406 0.074 0.537 0.223s0.223 0.301 0.275 0.458c0.192 0.471 0.507 0.886 0.943 1.244s0.952 0.537 1.546 0.537c0.611 0 1.153-0.17 1.624-0.511s0.803-0.773 0.996-1.297c0.070-0.14 0.179-0.284 0.327-0.432s0.301-0.223 0.458-0.223c0.244 0 0.511 0.035 0.799 0.105s0.572 0.166 0.851 0.288c0.279 0.122 0.537 0.279 0.773 0.472s0.423 0.402 0.563 0.629c0.087 0.14 0.113 0.293 0.079 0.458s-0.070 0.284-0.105 0.354c-0.227 0.506-0.297 1.039-0.21 1.598s0.341 1.048 0.76 1.467c0.419 0.419 0.934 0.651 1.546 0.694s1.179-0.057 1.703-0.301c0.14-0.087 0.31-0.122 0.511-0.105s0.371 0.096 0.511 0.236c0.262 0.244 0.493 0.616 0.694 1.113s0.336 1 0.406 1.506c0.035 0.297-0.013 0.528-0.144 0.694s-0.266 0.275-0.406 0.327c-0.542 0.192-1.004 0.528-1.388 1.009s-0.576 1.026-0.576 1.637c0 0.594 0.162 1.113 0.485 1.559s0.747 0.764 1.27 0.956c0.122 0.070 0.227 0.14 0.314 0.21 0.192 0.157 0.323 0.358 0.393 0.602v0zM16.451 19.462c0.786 0 1.528-0.149 2.227-0.445s1.305-0.707 1.821-1.231c0.515-0.524 0.921-1.131 1.218-1.821s0.445-1.428 0.445-2.214c0-0.786-0.148-1.524-0.445-2.214s-0.703-1.292-1.218-1.808c-0.515-0.515-1.122-0.921-1.821-1.218s-1.441-0.445-2.227-0.445c-0.786 0-1.524 0.148-2.214 0.445s-1.292 0.703-1.808 1.218c-0.515 0.515-0.921 1.118-1.218 1.808s-0.445 1.428-0.445 2.214c0 0.786 0.149 1.524 0.445 2.214s0.703 1.297 1.218 1.821c0.515 0.524 1.118 0.934 1.808 1.231s1.428 0.445 2.214 0.445v0z'],\n 'right': ['0 0 32 32', 'M22 16l-10.105-10.6-1.895 1.987 8.211 8.613-8.211 8.612 1.895 1.988 8.211-8.613z']\n };\n this.getSVG = (type) => {\n return `\n \n \n \n \n `;\n };\n\n this.isMobile = navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i);\n // compatibility: some mobile browsers don't suppose autoplay\n if (this.isMobile) {\n option.autoplay = false;\n }\n\n // default options\n const defaultOption = {\n element: document.getElementsByClassName('dplayer')[0],\n autoplay: false,\n theme: '#b7daff',\n loop: false\n };\n for (let defaultKey in defaultOption) {\n if (defaultOption.hasOwnProperty(defaultKey) && !option.hasOwnProperty(defaultKey)) {\n option[defaultKey] = defaultOption[defaultKey];\n }\n }\n\n this.option = option;\n this.loop = option.loop;\n\n /**\n * Parse second to 00:00 format\n *\n * @param {Number} second\n * @return {String} 00:00 format\n */\n this.secondToTime = (second) => {\n const add0 = (num) => {\n return num < 10 ? '0' + num : '' + num;\n };\n const min = parseInt(second / 60);\n const sec = parseInt(second - min * 60);\n return add0(min) + ':' + add0(sec);\n };\n\n /**\n * Update progress bar, including loading progress bar and play progress bar\n *\n * @param {String} type - Point out which bar it is, should be played loaded or volume\n * @param {Number} percentage\n * @param {String} direction - Point out the direction of this bar, Should be height or width\n */\n this.updateBar = (type, percentage, direction) => {\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this[type + 'Bar'].style[direction] = percentage * 100 + '%';\n };\n\n // define DPlayer events\n this.eventTypes = ['play', 'pause', 'canplay', 'playing', 'ended', 'error'];\n this.event = {};\n for (let type of this.eventTypes) {\n this.event[type] = [];\n }\n this.trigger = (type) => {\n for (let func of this.event[type]) {\n func();\n }\n }\n };\n\n /**\n * AutoLink initialization function\n */\n init() {\n this.element = this.option.element;\n\n let eleHTML = `\n
\n \n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n
\n
\n 0:00 / 0:00\n
\n
\n
\n \n
\n
\n 洗脑循环\n
\n \n \n
\n
\n
\n 速度\n
`\n + this.getSVG('right')\n + `
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n `;\n this.element.innerHTML = eleHTML;\n\n // get this audio object\n this.audio = this.element.getElementsByClassName('dplayer-video')[0];\n\n this.ptime = this.element.getElementsByClassName('dplayer-ptime')[0];\n\n // hide controller if mouse stops for 2 seconds\n let hideTime = 0;\n const hideController = () => {\n this.element.classList.remove('dplayer-hide-controller');\n clearTimeout(hideTime);\n hideTime = setTimeout(() => {\n if (this.audio.played.length) {\n this.element.classList.add('dplayer-hide-controller');\n }\n }, 2000);\n };\n this.element.addEventListener('mousemove', hideController);\n this.element.addEventListener('click', hideController);\n\n // play and pause button\n this.playButton = this.element.getElementsByClassName('dplayer-play-icon')[0];\n this.toggle = () => {\n if (this.audio.paused) {\n this.play();\n }\n else {\n this.pause();\n }\n };\n this.playButton.addEventListener('click', this.toggle);\n this.element.getElementsByClassName('dplayer-video-wrap')[0].addEventListener('click', this.toggle);\n this.element.getElementsByClassName('dplayer-controller-mask')[0].addEventListener('click', this.toggle);\n\n // control play progress\n this.playedBar = this.element.getElementsByClassName('dplayer-played')[0];\n this.loadedBar = this.element.getElementsByClassName('dplayer-loaded')[0];\n this.thumb = this.element.getElementsByClassName('dplayer-thumb')[0];\n this.bar = this.element.getElementsByClassName('dplayer-bar-wrap')[0];\n let barWidth;\n this.bar.addEventListener('click', (event) => {\n const e = event || window.event;\n barWidth = this.bar.clientWidth;\n let percentage = (e.clientX - getElementViewLeft(this.bar)) / barWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('played', percentage, 'width');\n this.element.getElementsByClassName('dplayer-ptime')[0].innerHTML = this.secondToTime(percentage * this.audio.duration);\n this.audio.currentTime = parseFloat(this.playedBar.style.width) / 100 * this.audio.duration;\n });\n\n const thumbMove = (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(this.bar)) / barWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('played', percentage, 'width');\n this.element.getElementsByClassName('dplayer-ptime')[0].innerHTML = this.secondToTime(percentage * this.audio.duration);\n };\n\n const thumbUp = () => {\n document.removeEventListener('mouseup', thumbUp);\n document.removeEventListener('mousemove', thumbMove);\n this.audio.currentTime = parseFloat(this.playedBar.style.width) / 100 * this.audio.duration;\n this.playedTime = setInterval(() => {\n this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width');\n this.element.getElementsByClassName('dplayer-ptime')[0].innerHTML = this.secondToTime(this.audio.currentTime);\n this.trigger('playing');\n }, 100);\n };\n\n this.bar.addEventListener('mousedown', () => {\n barWidth = this.bar.clientWidth;\n clearInterval(this.playedTime);\n document.addEventListener('mousemove', thumbMove);\n document.addEventListener('mouseup', thumbUp);\n });\n\n // control volume\n this.volumeBar = this.element.getElementsByClassName('dplayer-volume-bar-inner')[0];\n const volumeEle = this.element.getElementsByClassName('dplayer-volume')[0];\n const volumeBarWrapWrap = this.element.getElementsByClassName('dplayer-volume-bar-wrap')[0];\n const volumeBarWrap = this.element.getElementsByClassName('dplayer-volume-bar')[0];\n const volumeicon = this.element.getElementsByClassName('dplayer-volume-icon')[0];\n const vWidth = 35;\n const switchVolumeIcon = () => {\n if (this.audio.volume >= 0.8) {\n volumeicon.innerHTML = this.getSVG('volume-up');\n }\n else if (this.audio.volume > 0) {\n volumeicon.innerHTML = this.getSVG('volume-down');\n }\n else {\n volumeicon.innerHTML = this.getSVG('volume-off');\n }\n };\n const volumeMove = (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(volumeBarWrap) - 5.5) / vWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('volume', percentage, 'width');\n this.audio.volume = percentage;\n if (this.audio.muted) {\n this.audio.muted = false;\n }\n switchVolumeIcon();\n };\n const volumeUp = () => {\n document.removeEventListener('mouseup', volumeUp);\n document.removeEventListener('mousemove', volumeMove);\n volumeEle.classList.remove('dplayer-volume-active');\n };\n\n volumeBarWrapWrap.addEventListener('click', (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(volumeBarWrap) - 5.5) / vWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('volume', percentage, 'width');\n this.audio.volume = percentage;\n if (this.audio.muted) {\n this.audio.muted = false;\n }\n switchVolumeIcon();\n });\n volumeBarWrapWrap.addEventListener('mousedown', () => {\n document.addEventListener('mousemove', volumeMove);\n document.addEventListener('mouseup', volumeUp);\n volumeEle.classList.add('dplayer-volume-active');\n });\n volumeicon.addEventListener('click', () => {\n if (this.audio.muted) {\n this.audio.muted = false;\n switchVolumeIcon();\n this.updateBar('volume', this.audio.volume, 'width');\n }\n else {\n this.audio.muted = true;\n volumeicon.innerHTML = this.getSVG('volume-off');\n this.updateBar('volume', 0, 'width');\n }\n });\n\n // get element's view position\n function getElementViewLeft(element) {\n let actualLeft = element.offsetLeft;\n let current = element.offsetParent;\n let elementScrollLeft;\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n return actualLeft - elementScrollLeft;\n }\n\n function getElementViewTop(element) {\n let actualTop = element.offsetTop;\n let current = element.offsetParent;\n let elementScrollTop;\n while (current !== null) {\n actualTop += current.offsetTop;\n current = current.offsetParent;\n }\n elementScrollTop = document.body.scrollTop + document.documentElement.scrollTop;\n return actualTop - elementScrollTop;\n }\n\n // toggle setting box\n const settingIcon = this.element.getElementsByClassName('dplayer-setting-icon')[0];\n const settingBox = this.element.getElementsByClassName('dplayer-setting-box')[0];\n settingIcon.addEventListener('click', () => {\n if (settingBox.classList.contains('dplayer-setting-box-open')) {\n settingBox.classList.remove('dplayer-setting-box-open')\n }\n else {\n settingBox.classList.add('dplayer-setting-box-open')\n }\n });\n\n // setting\n const settingEvent = () => {\n // loop control\n const loopEle = this.element.getElementsByClassName('dplayer-setting-loop')[0];\n const loopToggle = loopEle.getElementsByClassName('dplayer-toggle-setting-input')[0];\n loopEle.addEventListener('click', () => {\n loopToggle.checked = !loopToggle.checked;\n if (loopToggle.checked) {\n this.loop = true;\n this.audio.loop = this.loop;\n }\n else {\n this.loop = false;\n this.audio.loop = this.loop;\n }\n settingBox.classList.remove('dplayer-setting-box-open');\n });\n loopToggle.addEventListener('change', () => {\n if (loopToggle.checked) {\n this.loop = true;\n this.audio.loop = this.loop;\n }\n else {\n this.loop = false;\n this.audio.loop = this.loop;\n }\n settingBox.classList.remove('dplayer-setting-box-open');\n });\n\n // speed control\n const settingBack = settingBox.innerHTML;\n const speedEle = this.element.getElementsByClassName('dplayer-setting-speed')[0];\n speedEle.addEventListener('click', () => {\n settingBox.classList.add('dplayer-setting-box-narrow');\n settingBox.innerHTML = `\n
\n 0.5\n
\n
\n 0.75\n
\n
\n 正常\n
\n
\n 1.25\n
\n
\n 1.5\n
\n
\n 2\n
`;\n\n const speedItem = settingBox.getElementsByClassName('dplayer-setting-speed-item');\n for (let i = 0; i < speedItem.length; i++) {\n speedItem[i].addEventListener('click', () => {\n this.audio.playbackRate = speedItem[i].dataset.speed;\n settingBox.classList.remove('dplayer-setting-box-narrow');\n setTimeout(() => {\n settingBox.innerHTML = settingBack;\n settingEvent();\n }, 300);\n settingBox.classList.remove('dplayer-setting-box-open');\n });\n }\n });\n };\n settingEvent();\n\n // full screen\n this.element.getElementsByClassName('dplayer-full-icon')[0].addEventListener('click', () => {\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n if (this.element.requestFullscreen) {\n this.element.requestFullscreen();\n }\n else if (this.element.mozRequestFullScreen) {\n this.element.mozRequestFullScreen();\n }\n else if (this.element.webkitRequestFullscreen) {\n this.element.webkitRequestFullscreen();\n }\n } else {\n if (document.cancelFullScreen) {\n document.cancelFullScreen();\n }\n else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n }\n else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n }\n }\n });\n\n // show audio time: the metadata has loaded or changed\n this.audio.addEventListener('durationchange', () => {\n if (this.audio.duration !== 1) { // compatibility: Android browsers will output 1 at first\n this.element.getElementsByClassName('dplayer-dtime')[0].innerHTML = this.secondToTime(this.audio.duration);\n }\n });\n\n // show audio loaded bar: to inform interested parties of progress downloading the media\n this.audio.addEventListener('progress', () => {\n const percentage = this.audio.buffered.length ? this.audio.buffered.end(this.audio.buffered.length - 1) / this.audio.duration : 0;\n this.updateBar('loaded', percentage, 'width');\n });\n\n // audio download error: an error occurs\n this.audio.addEventListener('error', () => {\n this.element.getElementsByClassName('dplayer-ptime')[0].innerHTML = `Error happens ╥﹏╥`;\n this.trigger('pause');\n });\n\n // audio can play: enough data is available that the media can be played\n this.audio.addEventListener('canplay', () => {\n this.trigger('canplay');\n });\n\n // music end\n this.ended = false;\n this.audio.addEventListener('ended', () => {\n this.updateBar('played', 1, 'width');\n if (!this.loop) {\n this.ended = true;\n this.pause();\n this.trigger('ended');\n }\n });\n\n // control volume\n this.audio.volume = parseInt(this.element.getElementsByClassName('dplayer-volume-bar-inner')[0].style.width) / 100;\n\n // loop\n this.audio.loop = this.loop;\n\n // set duration time\n if (this.audio.duration !== 1) { // compatibility: Android browsers will output 1 at first\n this.element.getElementsByClassName('dplayer-dtime')[0].innerHTML = this.audio.duration ? this.secondToTime(this.audio.duration) : '00:00';\n }\n\n const danContainer = this.element.getElementsByClassName('dplayer-danmaku')[0];\n const danWidth = danContainer.offsetWidth;\n const danHeight = danContainer.offsetHeight;\n const itemHeight = 30;\n const itemY = danHeight / itemHeight;\n let danTunnel = {};\n window.danTunnel = danTunnel;\n\n const danItemRight = (ele) => {\n return danContainer.getBoundingClientRect().right - ele.getBoundingClientRect().right;\n };\n\n const getTunnel = (ele) => {\n for (let i = 0; i <= itemY - 1; i++) {\n let item = danTunnel[i + ''];\n if (item && item.length) {\n for (let j = 0; j < item.length; j++) {\n if (danItemRight(item[j]) <= 0) {\n break;\n }\n if (j === item.length - 1) {\n danTunnel[i + ''].push(ele);\n ele.addEventListener('animationend', () => {\n danTunnel[i + ''].splice(0, 1);\n });\n return i;\n }\n }\n }\n else {\n danTunnel[i + ''] = [ele];\n ele.addEventListener('animationend', () => {\n danTunnel[i + ''].splice(0, 1);\n });\n return i;\n }\n }\n };\n\n this.danmakuIn = (text, color, type) => {\n let item = document.createElement(`div`);\n let content = document.createTextNode(text);\n item.classList.add(`dplayer-danmaku-item`);\n item.style.color = color;\n item.appendChild(content);\n\n // insert\n danContainer.appendChild(item);\n\n // adjust\n item.style.width = (item.offsetWidth + 1) + 'px';\n item.style.transform = `translateX(-${danWidth}px)`;\n item.style.top = itemHeight * getTunnel(item) + 'px';\n item.addEventListener('animationend', () => {\n danContainer.removeChild(item);\n });\n\n // move\n item.classList.add(`dplayer-danmaku-move`);\n };\n \n // danmaku\n if (this.option.danmaku) {\n this.danIndex = 0;\n const xhr = new XMLHttpRequest();\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n this.dan = JSON.parse(xhr.responseText).danmaku;\n console.log(this.dan);\n\n // autoplay\n if (this.option.autoplay && !this.isMobile) {\n this.play();\n }\n else if (this.isMobile) {\n this.pause();\n }\n }\n else {\n console.log('Request was unsuccessful: ' + xhr.status);\n }\n }\n };\n xhr.open('get', this.option.danmaku.get, true);\n xhr.send(null);\n }\n else {\n // autoplay\n if (this.option.autoplay && !this.isMobile) {\n this.play();\n }\n else if (this.isMobile) {\n this.pause();\n }\n }\n }\n\n /**\n * Play music\n */\n play() {\n if (this.audio.paused) {\n this.playButton.innerHTML = this.getSVG('pause');\n\n this.audio.play();\n if (this.playedTime) {\n clearInterval(this.playedTime);\n }\n if (this.option.danmaku) {\n this.playedTime = setInterval(() => {\n this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width');\n this.ptime.innerHTML = this.secondToTime(this.audio.currentTime);\n this.trigger('playing');\n\n const item = this.dan[this.danIndex];\n if (item && this.audio.currentTime >= item.time) {\n this.danmakuIn(item.text, item.color, item.type);\n this.danIndex++;\n }\n }, 100);\n }\n else {\n this.playedTime = setInterval(() => {\n this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width');\n this.ptime.innerHTML = this.secondToTime(this.audio.currentTime);\n this.trigger('playing');\n }, 100);\n }\n this.element.classList.add('dplayer-playing');\n this.trigger('play');\n }\n }\n\n /**\n * Pause music\n */\n pause() {\n if (!this.audio.paused || this.ended) {\n this.ended = false;\n this.playButton.innerHTML = this.getSVG('play');\n this.audio.pause();\n clearInterval(this.playedTime);\n this.element.classList.remove('dplayer-playing');\n this.trigger('pause');\n }\n }\n\n /**\n * attach event\n */\n on(name, func) {\n if (typeof func === 'function') {\n this.event[name].push(func);\n }\n }\n}\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = DPlayer\n}\nelse {\n window.DPlayer = DPlayer;\n}\n})();"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/DPlayer.js b/src/DPlayer.js index 5034925..8ecb8a7 100644 --- a/src/DPlayer.js +++ b/src/DPlayer.js @@ -164,6 +164,8 @@ // get this audio object this.audio = this.element.getElementsByClassName('dplayer-video')[0]; + this.ptime = this.element.getElementsByClassName('dplayer-ptime')[0]; + // hide controller if mouse stops for 2 seconds let hideTime = 0; const hideController = () => { @@ -354,6 +356,7 @@ this.loop = false; this.audio.loop = this.loop; } + settingBox.classList.remove('dplayer-setting-box-open'); }); loopToggle.addEventListener('change', () => { if (loopToggle.checked) { @@ -364,6 +367,7 @@ this.loop = false; this.audio.loop = this.loop; } + settingBox.classList.remove('dplayer-setting-box-open'); }); // speed control @@ -389,8 +393,8 @@
2 -
- `; + `; + const speedItem = settingBox.getElementsByClassName('dplayer-setting-speed-item'); for (let i = 0; i < speedItem.length; i++) { speedItem[i].addEventListener('click', () => { @@ -400,6 +404,7 @@ settingBox.innerHTML = settingBack; settingEvent(); }, 300); + settingBox.classList.remove('dplayer-setting-box-open'); }); } }); @@ -455,7 +460,7 @@ this.trigger('canplay'); }); - // multiple music play + // music end this.ended = false; this.audio.addEventListener('ended', () => { this.updateBar('played', 1, 'width'); @@ -477,14 +482,101 @@ this.element.getElementsByClassName('dplayer-dtime')[0].innerHTML = this.audio.duration ? this.secondToTime(this.audio.duration) : '00:00'; } - // autoplay - if (this.option.autoplay && !this.isMobile) { - this.play(); - } - this.option.autoplay = true; // autoplay next music + const danContainer = this.element.getElementsByClassName('dplayer-danmaku')[0]; + const danWidth = danContainer.offsetWidth; + const danHeight = danContainer.offsetHeight; + const itemHeight = 30; + const itemY = danHeight / itemHeight; + let danTunnel = {}; + window.danTunnel = danTunnel; - if (this.isMobile) { - this.pause(); + const danItemRight = (ele) => { + return danContainer.getBoundingClientRect().right - ele.getBoundingClientRect().right; + }; + + const getTunnel = (ele) => { + for (let i = 0; i <= itemY - 1; i++) { + let item = danTunnel[i + '']; + if (item && item.length) { + for (let j = 0; j < item.length; j++) { + if (danItemRight(item[j]) <= 0) { + break; + } + if (j === item.length - 1) { + danTunnel[i + ''].push(ele); + ele.addEventListener('animationend', () => { + danTunnel[i + ''].splice(0, 1); + }); + return i; + } + } + } + else { + danTunnel[i + ''] = [ele]; + ele.addEventListener('animationend', () => { + danTunnel[i + ''].splice(0, 1); + }); + return i; + } + } + }; + + this.danmakuIn = (text, color, type) => { + let item = document.createElement(`div`); + let content = document.createTextNode(text); + item.classList.add(`dplayer-danmaku-item`); + item.style.color = color; + item.appendChild(content); + + // insert + danContainer.appendChild(item); + + // adjust + item.style.width = (item.offsetWidth + 1) + 'px'; + item.style.transform = `translateX(-${danWidth}px)`; + item.style.top = itemHeight * getTunnel(item) + 'px'; + item.addEventListener('animationend', () => { + danContainer.removeChild(item); + }); + + // move + item.classList.add(`dplayer-danmaku-move`); + }; + + // danmaku + if (this.option.danmaku) { + this.danIndex = 0; + const xhr = new XMLHttpRequest(); + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { + this.dan = JSON.parse(xhr.responseText).danmaku; + console.log(this.dan); + + // autoplay + if (this.option.autoplay && !this.isMobile) { + this.play(); + } + else if (this.isMobile) { + this.pause(); + } + } + else { + console.log('Request was unsuccessful: ' + xhr.status); + } + } + }; + xhr.open('get', this.option.danmaku.get, true); + xhr.send(null); + } + else { + // autoplay + if (this.option.autoplay && !this.isMobile) { + this.play(); + } + else if (this.isMobile) { + this.pause(); + } } } @@ -499,11 +591,26 @@ if (this.playedTime) { clearInterval(this.playedTime); } - this.playedTime = setInterval(() => { - this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width'); - this.element.getElementsByClassName('dplayer-ptime')[0].innerHTML = this.secondToTime(this.audio.currentTime); - this.trigger('playing'); - }, 100); + if (this.option.danmaku) { + this.playedTime = setInterval(() => { + this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width'); + this.ptime.innerHTML = this.secondToTime(this.audio.currentTime); + this.trigger('playing'); + + const item = this.dan[this.danIndex]; + if (item && this.audio.currentTime >= item.time) { + this.danmakuIn(item.text, item.color, item.type); + this.danIndex++; + } + }, 100); + } + else { + this.playedTime = setInterval(() => { + this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width'); + this.ptime.innerHTML = this.secondToTime(this.audio.currentTime); + this.trigger('playing'); + }, 100); + } this.element.classList.add('dplayer-playing'); this.trigger('play'); } diff --git a/src/DPlayer.scss b/src/DPlayer.scss index 5f4c830..89f377c 100644 --- a/src/DPlayer.scss +++ b/src/DPlayer.scss @@ -16,6 +16,10 @@ opacity: 0; } + .dplayer-danmaku-move { + animation-play-state: running !important; + } + &:hover { .dplayer-controller-mask { opacity: 1; @@ -36,6 +40,7 @@ } .dplayer-video-wrap { + position: relative; background: #000; font-size: 0; width: 100%; @@ -53,16 +58,39 @@ right: 0; top: 0; bottom: 0; + font-size: 24px; + color: #fff; + + .dplayer-danmaku-item { + display: inline-block; + position: absolute; + right: 0; + transform: translateX(100%); + pointer-events: none; + user-select: none; + cursor: default; + white-space: nowrap; + + &.dplayer-danmaku-move { + will-change: transform; + animation: danmaku 5s linear; + animation-play-state: paused; + } + } + + @keyframes danmaku { + from { + transform: translateX(100%); + } + } } .dplayer-controller-mask { - background-repeat: repeat-x; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==); + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom; height: 98px; width: 100%; position: absolute; bottom: 0; - background-position: bottom; transition: all 0.3s ease; } @@ -274,6 +302,7 @@ &.dplayer-setting-box-narrow { width: 70px; height: 180px; + text-align: center; } }