diff --git a/demo/danmaku.json b/demo/danmaku.json index 2766ed1..193e52a 100644 --- a/demo/danmaku.json +++ b/demo/danmaku.json @@ -1,53 +1,53 @@ { "danmaku": [ + { + "author": "DIYgod", + "time": "2.8", + "text": "此生无悔入", + "color": "#f00", + "type": "right" + }, + { + "author": "DIYgod", + "time": "1.6", + "text": "此生无悔入四月来世愿做友人A", + "color": "#ff0", + "type": "right" + }, { "author": "DIYgod", "time": "0.4", - "text": "比♂利比♂利爱1", + "text": "此生无悔入四月来世", "color": "#f00", "type": "right" }, { "author": "DIYgod", "time": "0.8", - "text": "比♂利比♂利比♂利爱1.2", + "text": "此生无悔入四月来世愿做友人A此生无悔入四月来世愿做", "color": "#0f0", "type": "right" }, { "author": "DIYgod", "time": "1.2", - "text": "比♂利比♂利爱1.4比♂利比♂利爱1.4比♂利比♂利爱1.4比♂利比♂利爱1.4比♂利比♂利爱1.4比♂利比♂利爱1.4", + "text": "此生无悔入四月来世愿做友人", "color": "#00f", "type": "right" }, - { - "author": "DIYgod", - "time": "1.6", - "text": "比♂利比♂利爱1.6", - "color": "#ff0", - "type": "right" - }, { "author": "DIYgod", "time": "2.0", - "text": "比♂利比♂利比♂利爱1.8", + "text": "此生无悔入四月来世愿做友人A", "color": "#f0f", "type": "right" }, { "author": "DIYgod", "time": "2.4", - "text": "比♂利比♂利比♂利爱2", + "text": "此生无悔入四月来世愿做友人A", "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 3a0d8a3..6c19699 100644 --- a/demo/index.html +++ b/demo/index.html @@ -61,8 +61,8 @@ autoplay: false, theme: '#FADFA3', video: { - url: 'http://o6m1pq7od.bkt.clouddn.com/禁绝的边境线.mp4', - pic: 'http://o6m1pq7od.bkt.clouddn.com/禁绝的边境线.jpg' + url: 'http://o6m1pq7od.bkt.clouddn.com/最后的告白.mp4', + pic: 'http://o6m1pq7od.bkt.clouddn.com/poster.jpg' }, danmaku: { get: 'danmaku.json' diff --git a/dist/DPlayer.min.css b/dist/DPlayer.min.css index 9d947fc..22923ff 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 .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 +.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-mask{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;display:none}.dplayer .dplayer-mask.dplayer-mask-show{display:block}.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:22px;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-icon.dplayer-comment-icon{padding:10px 9px 9px}.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;z-index:2}.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-comment{display:inline-block;height:100%}.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 946ca57..67ed5ec 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 _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},_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 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}(); +"use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},_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 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,this.element.innerHTML='\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
\n
\n \n
\n
\n
\n
\n '),this.audio=this.element.getElementsByClassName("dplayer-video")[0],this.ptime=this.element.getElementsByClassName("dplayer-ptime")[0],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.bar=this.element.getElementsByClassName("dplayer-bar-wrap")[0];var n=void 0;this.audio.addEventListener("seeked",function(){if(t.option.danmaku)for(var e=0;e=t.audio.currentTime)return void(t.danIndex=e)}),this.setTime=function(){t.option.danmaku?t.playedTime=setInterval(function(){t.updateBar("played",t.audio.currentTime/t.audio.duration,"width"),t.ptime.innerHTML=t.secondToTime(t.audio.currentTime),t.trigger("playing");var e=t.dan[t.danIndex];e&&t.audio.currentTime>=e.time&&(t.danmakuIn(e.text,e.color,e.type),t.danIndex++)},100):t.playedTime=setInterval(function(){t.updateBar("played",t.audio.currentTime/t.audio.duration,"width"),t.ptime.innerHTML=t.secondToTime(t.audio.currentTime),t.trigger("playing")},100)},this.bar.addEventListener("click",function(a){var s=a||window.event;n=t.bar.clientWidth;var i=(s.clientX-e(t.bar))/n;i=i>0?i:0,i=1>i?i:1,t.updateBar("played",i,"width"),t.element.getElementsByClassName("dplayer-ptime")[0].innerHTML=t.secondToTime(i*t.audio.duration),t.audio.currentTime=parseFloat(t.playedBar.style.width)/100*t.audio.duration});var a=function(a){var s=a||window.event,i=(s.clientX-e(t.bar))/n;i=i>0?i:0,i=1>i?i:1,t.updateBar("played",i,"width"),t.element.getElementsByClassName("dplayer-ptime")[0].innerHTML=t.secondToTime(i*t.audio.duration)},s=function z(){document.removeEventListener("mouseup",z),document.removeEventListener("mousemove",a),t.audio.currentTime=parseFloat(t.playedBar.style.width)/100*t.audio.duration,t.setTime()};this.bar.addEventListener("mousedown",function(){n=t.bar.clientWidth,clearInterval(t.playedTime),document.addEventListener("mousemove",a),document.addEventListener("mouseup",s)}),this.volumeBar=this.element.getElementsByClassName("dplayer-volume-bar-inner")[0];var i=this.element.getElementsByClassName("dplayer-volume")[0],l=this.element.getElementsByClassName("dplayer-volume-bar-wrap")[0],d=this.element.getElementsByClassName("dplayer-volume-bar")[0],o=this.element.getElementsByClassName("dplayer-volume-icon")[0],r=35,c=function(){t.audio.volume>=.8?o.innerHTML=t.getSVG("volume-up"):t.audio.volume>0?o.innerHTML=t.getSVG("volume-down"):o.innerHTML=t.getSVG("volume-off")},u=function(n){var a=n||window.event,s=(a.clientX-e(d)-5.5)/r;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),c()},p=function x(){document.removeEventListener("mouseup",x),document.removeEventListener("mousemove",u),i.classList.remove("dplayer-volume-active")};l.addEventListener("click",function(n){var a=n||window.event,s=(a.clientX-e(d)-5.5)/r;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),c()}),l.addEventListener("mousedown",function(){document.addEventListener("mousemove",u),document.addEventListener("mouseup",p),i.classList.add("dplayer-volume-active")}),o.addEventListener("click",function(){t.audio.muted?(t.audio.muted=!1,c(),t.updateBar("volume",t.audio.volume,"width")):(t.audio.muted=!0,o.innerHTML=t.getSVG("volume-off"),t.updateBar("volume",0,"width"))});var m={original:'\n
\n 洗脑循环\n
\n \n \n
\n
\n
\n 速度\n
'+this.getSVG("right")+"
\n
",speed:'\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
'},v=this.element.getElementsByClassName("dplayer-setting-icon")[0],y=this.element.getElementsByClassName("dplayer-setting-box")[0],h=this.element.getElementsByClassName("dplayer-mask")[0];y.innerHTML=m.original;var g=function(){y.classList.contains("dplayer-setting-box-open")&&(y.classList.remove("dplayer-setting-box-open"),h.classList.remove("dplayer-mask-show"),setTimeout(function(){y.classList.remove("dplayer-setting-box-narrow"),y.innerHTML=m.original,b()},300))},f=function(){y.classList.add("dplayer-setting-box-open"),h.classList.add("dplayer-mask-show")};h.addEventListener("click",function(){g()}),v.addEventListener("click",function(){f()});var b=function(){var e=t.element.getElementsByClassName("dplayer-setting-loop")[0],n=e.getElementsByClassName("dplayer-toggle-setting-input")[0];n.checked=t.loop,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()}),n.addEventListener("change",function(){n.checked?(t.loop=!0,t.audio.loop=t.loop):(t.loop=!1,t.audio.loop=t.loop),g()});var a=t.element.getElementsByClassName("dplayer-setting-speed")[0];a.addEventListener("click",function(){y.classList.add("dplayer-setting-box-narrow"),y.innerHTML=m.speed;for(var e=y.getElementsByClassName("dplayer-setting-speed-item"),n=function(n){e[n].addEventListener("click",function(){t.audio.playbackRate=e[n].dataset.speed,g()})},a=0;a=i)break;if(s===a.length-1)return M[n+""].push(e),e.addEventListener("animationend",function(){M[n+""].splice(0,1)}),{v:n}}},a=0;q-1>=a;a++){var s=n(a);if("object"===("undefined"==typeof s?"undefined":_typeof(s)))return s.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),w.appendChild(a),a.style.width=a.offsetWidth+1+"px",a.style.transform="translateX(-"+k+"px)",a.style.top=B*S(a)+"px",a.addEventListener("animationend",function(){w.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.sort(function(e,t){return e.time-t.time}),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(){this.audio.paused&&(this.playButton.innerHTML=this.getSVG("pause"),this.audio.play(),this.playedTime&&clearInterval(this.playedTime),this.setTime(),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 2fc52d0..30f6ac1 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","_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 +{"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","comment","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","innerHTML","video","pic","url","audio","ptime","playButton","toggle","paused","addEventListener","playedBar","loadedBar","bar","barWidth","danmaku","dan","time","currentTime","danIndex","setTime","playedTime","setInterval","duration","item","danmakuIn","text","color","e","window","clientWidth","clientX","parseFloat","width","thumbMove","thumbUp","removeEventListener","clearInterval","volumeBar","volumeEle","volumeBarWrapWrap","volumeBarWrap","volumeicon","vWidth","switchVolumeIcon","volume","volumeMove","muted","volumeUp","classList","remove","add","settingHTML","original","speed","settingIcon","settingBox","mask","closeSetting","contains","setTimeout","settingEvent","openSetting","loopEle","loopToggle","checked","speedEle","speedItem","_loop","playbackRate","dataset","hideTime","hideController","clearTimeout","played","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","buffered","end","ended","danContainer","danWidth","offsetWidth","danHeight","offsetHeight","itemHeight","itemY","danTunnel","danItemRight","ele","getBoundingClientRect","danSpeed","getTunnel","tmp","_loop2","splice","v","j","danRight","push","_ret2","createElement","content","createTextNode","appendChild","transform","top","removeChild","xhr","XMLHttpRequest","onreadystatechange","readyState","status","JSON","parse","responseText","sort","a","b","console","log","open","get","send","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 'comment': ['0 0 32 32', 'M27.128 0.38h-22.553c-2.336 0-4.229 1.825-4.229 4.076v16.273c0 2.251 1.893 4.076 4.229 4.076h4.229v-2.685h8.403l-8.784 8.072 1.566 1.44 7.429-6.827h9.71c2.335 0 4.229-1.825 4.229-4.076v-16.273c0-2.252-1.894-4.076-4.229-4.076zM28.538 19.403c0 1.5-1.262 2.717-2.819 2.717h-8.36l-0.076-0.070-0.076 0.070h-11.223c-1.557 0-2.819-1.217-2.819-2.717v-13.589c0-1.501 1.262-2.718 2.819-2.718h19.734c1.557 0 2.819-0.141 2.819 1.359v14.947zM9.206 10.557c-1.222 0-2.215 0.911-2.215 2.036s0.992 2.035 2.215 2.035c1.224 0 2.216-0.911 2.216-2.035s-0.992-2.036-2.216-2.036zM22.496 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.224 0 2.215-0.911 2.215-2.035s-0.991-2.036-2.215-2.036zM15.852 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.222 0 2.215-0.911 2.215-2.035s-0.992-2.036-2.215-2.036z']\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 this.element.innerHTML = `\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
\n
\n \n
\n
\n
\n
\n `;\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 // 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.bar = this.element.getElementsByClassName('dplayer-bar-wrap')[0];\n let barWidth;\n\n this.audio.addEventListener('seeked', () => {\n if (this.option.danmaku) {\n for (let i = 0; i < this.dan.length; i++) {\n if (this.dan[i].time >= this.audio.currentTime) {\n this.danIndex = i;\n return;\n }\n }\n }\n });\n\n this.setTime = () => {\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 };\n\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.setTime();\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 // setting\n const settingHTML = {\n 'original': `\n
\n 洗脑循环\n
\n \n \n
\n
\n
\n 速度\n
`\n + this.getSVG('right')\n + `
\n
`,\n 'speed': `\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\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 const mask = this.element.getElementsByClassName('dplayer-mask')[0];\n settingBox.innerHTML = settingHTML.original;\n\n const closeSetting = () => {\n if (settingBox.classList.contains('dplayer-setting-box-open')) {\n settingBox.classList.remove('dplayer-setting-box-open');\n mask.classList.remove('dplayer-mask-show');\n setTimeout(() => {\n settingBox.classList.remove('dplayer-setting-box-narrow');\n settingBox.innerHTML = settingHTML.original;\n settingEvent();\n }, 300);\n }\n };\n const openSetting = () => {\n settingBox.classList.add('dplayer-setting-box-open');\n mask.classList.add('dplayer-mask-show');\n };\n\n mask.addEventListener('click', () => {\n closeSetting();\n });\n settingIcon.addEventListener('click', () => {\n openSetting();\n });\n\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\n loopToggle.checked = this.loop;\n\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 closeSetting();\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 closeSetting();\n });\n\n // speed control\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 = settingHTML.speed;\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 closeSetting();\n });\n }\n });\n };\n settingEvent();\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 closeSetting();\n }\n }, 2000);\n };\n this.element.addEventListener('mousemove', hideController);\n this.element.addEventListener('click', hideController);\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\n const danItemRight = (ele) => {\n return danContainer.getBoundingClientRect().right - ele.getBoundingClientRect().right;\n };\n\n const danSpeed = (ele) => {\n return (danWidth + ele.offsetWidth) / 5;\n };\n\n const getTunnel = (ele) => {\n const tmp = danWidth / danSpeed(ele);\n\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 const danRight = danItemRight(item[j]);\n if (danRight <= 640 - (tmp * danSpeed(item[j])) || danRight <= 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.sort((a, b) => a.time - b.time);\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 this.setTime();\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 8ecb8a7..0cf92b7 100644 --- a/src/DPlayer.js +++ b/src/DPlayer.js @@ -17,7 +17,8 @@ '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'], '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'], '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'], - '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'] + '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'], + 'comment': ['0 0 32 32', 'M27.128 0.38h-22.553c-2.336 0-4.229 1.825-4.229 4.076v16.273c0 2.251 1.893 4.076 4.229 4.076h4.229v-2.685h8.403l-8.784 8.072 1.566 1.44 7.429-6.827h9.71c2.335 0 4.229-1.825 4.229-4.076v-16.273c0-2.252-1.894-4.076-4.229-4.076zM28.538 19.403c0 1.5-1.262 2.717-2.819 2.717h-8.36l-0.076-0.070-0.076 0.070h-11.223c-1.557 0-2.819-1.217-2.819-2.717v-13.589c0-1.501 1.262-2.718 2.819-2.718h19.734c1.557 0 2.819-0.141 2.819 1.359v14.947zM9.206 10.557c-1.222 0-2.215 0.911-2.215 2.036s0.992 2.035 2.215 2.035c1.224 0 2.216-0.911 2.216-2.035s-0.992-2.036-2.216-2.036zM22.496 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.224 0 2.215-0.911 2.215-2.035s-0.991-2.036-2.215-2.036zM15.852 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.222 0 2.215-0.911 2.215-2.035s-0.992-2.036-2.215-2.036z'] }; this.getSVG = (type) => { return ` @@ -89,7 +90,7 @@ func(); } } - }; + } /** * AutoLink initialization function @@ -97,7 +98,8 @@ init() { this.element = this.option.element; - let eleHTML = ` + this.element.innerHTML = ` +
`; - this.element.innerHTML = eleHTML; // 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 = () => { - this.element.classList.remove('dplayer-hide-controller'); - clearTimeout(hideTime); - hideTime = setTimeout(() => { - if (this.audio.played.length) { - this.element.classList.add('dplayer-hide-controller'); - } - }, 2000); - }; - this.element.addEventListener('mousemove', hideController); - this.element.addEventListener('click', hideController); - // play and pause button this.playButton = this.element.getElementsByClassName('dplayer-play-icon')[0]; this.toggle = () => { @@ -197,9 +176,43 @@ // control play progress 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]; let barWidth; + + this.audio.addEventListener('seeked', () => { + if (this.option.danmaku) { + for (let i = 0; i < this.dan.length; i++) { + if (this.dan[i].time >= this.audio.currentTime) { + this.danIndex = i; + return; + } + } + } + }); + + this.setTime = () => { + 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.bar.addEventListener('click', (event) => { const e = event || window.event; barWidth = this.bar.clientWidth; @@ -224,11 +237,7 @@ document.removeEventListener('mouseup', thumbUp); document.removeEventListener('mousemove', thumbMove); this.audio.currentTime = parseFloat(this.playedBar.style.width) / 100 * this.audio.duration; - 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); + this.setTime(); }; this.bar.addEventListener('mousedown', () => { @@ -329,53 +338,23 @@ return actualTop - elementScrollTop; } - // toggle setting box - const settingIcon = this.element.getElementsByClassName('dplayer-setting-icon')[0]; - const settingBox = this.element.getElementsByClassName('dplayer-setting-box')[0]; - settingIcon.addEventListener('click', () => { - if (settingBox.classList.contains('dplayer-setting-box-open')) { - settingBox.classList.remove('dplayer-setting-box-open') - } - else { - settingBox.classList.add('dplayer-setting-box-open') - } - }); - // setting - const settingEvent = () => { - // loop control - const loopEle = this.element.getElementsByClassName('dplayer-setting-loop')[0]; - const loopToggle = loopEle.getElementsByClassName('dplayer-toggle-setting-input')[0]; - loopEle.addEventListener('click', () => { - loopToggle.checked = !loopToggle.checked; - if (loopToggle.checked) { - this.loop = true; - this.audio.loop = this.loop; - } - else { - this.loop = false; - this.audio.loop = this.loop; - } - settingBox.classList.remove('dplayer-setting-box-open'); - }); - loopToggle.addEventListener('change', () => { - if (loopToggle.checked) { - this.loop = true; - this.audio.loop = this.loop; - } - else { - this.loop = false; - this.audio.loop = this.loop; - } - settingBox.classList.remove('dplayer-setting-box-open'); - }); - - // speed control - const settingBack = settingBox.innerHTML; - const speedEle = this.element.getElementsByClassName('dplayer-setting-speed')[0]; - speedEle.addEventListener('click', () => { - settingBox.classList.add('dplayer-setting-box-narrow'); - settingBox.innerHTML = ` + const settingHTML = { + 'original': ` +
+ 洗脑循环 +
+ + +
+
+
+ 速度 +
` + + this.getSVG('right') + + `
+
`, + 'speed': `
0.5
@@ -393,24 +372,101 @@
2 -
`; + ` + }; + + // toggle setting box + const settingIcon = this.element.getElementsByClassName('dplayer-setting-icon')[0]; + const settingBox = this.element.getElementsByClassName('dplayer-setting-box')[0]; + const mask = this.element.getElementsByClassName('dplayer-mask')[0]; + settingBox.innerHTML = settingHTML.original; + + const closeSetting = () => { + if (settingBox.classList.contains('dplayer-setting-box-open')) { + settingBox.classList.remove('dplayer-setting-box-open'); + mask.classList.remove('dplayer-mask-show'); + setTimeout(() => { + settingBox.classList.remove('dplayer-setting-box-narrow'); + settingBox.innerHTML = settingHTML.original; + settingEvent(); + }, 300); + } + }; + const openSetting = () => { + settingBox.classList.add('dplayer-setting-box-open'); + mask.classList.add('dplayer-mask-show'); + }; + + mask.addEventListener('click', () => { + closeSetting(); + }); + settingIcon.addEventListener('click', () => { + openSetting(); + }); + + const settingEvent = () => { + // loop control + const loopEle = this.element.getElementsByClassName('dplayer-setting-loop')[0]; + const loopToggle = loopEle.getElementsByClassName('dplayer-toggle-setting-input')[0]; + + loopToggle.checked = this.loop; + + loopEle.addEventListener('click', () => { + loopToggle.checked = !loopToggle.checked; + if (loopToggle.checked) { + this.loop = true; + this.audio.loop = this.loop; + } + else { + this.loop = false; + this.audio.loop = this.loop; + } + closeSetting(); + }); + loopToggle.addEventListener('change', () => { + if (loopToggle.checked) { + this.loop = true; + this.audio.loop = this.loop; + } + else { + this.loop = false; + this.audio.loop = this.loop; + } + closeSetting(); + }); + + // speed control + const speedEle = this.element.getElementsByClassName('dplayer-setting-speed')[0]; + speedEle.addEventListener('click', () => { + settingBox.classList.add('dplayer-setting-box-narrow'); + settingBox.innerHTML = settingHTML.speed; const speedItem = settingBox.getElementsByClassName('dplayer-setting-speed-item'); for (let i = 0; i < speedItem.length; i++) { speedItem[i].addEventListener('click', () => { this.audio.playbackRate = speedItem[i].dataset.speed; - settingBox.classList.remove('dplayer-setting-box-narrow'); - setTimeout(() => { - settingBox.innerHTML = settingBack; - settingEvent(); - }, 300); - settingBox.classList.remove('dplayer-setting-box-open'); + closeSetting(); }); } }); }; settingEvent(); + // hide controller if mouse stops for 2 seconds + let hideTime = 0; + const hideController = () => { + this.element.classList.remove('dplayer-hide-controller'); + clearTimeout(hideTime); + hideTime = setTimeout(() => { + if (this.audio.played.length) { + this.element.classList.add('dplayer-hide-controller'); + closeSetting(); + } + }, 2000); + }; + this.element.addEventListener('mousemove', hideController); + this.element.addEventListener('click', hideController); + // full screen this.element.getElementsByClassName('dplayer-full-icon')[0].addEventListener('click', () => { if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) { @@ -488,18 +544,24 @@ const itemHeight = 30; const itemY = danHeight / itemHeight; let danTunnel = {}; - window.danTunnel = danTunnel; const danItemRight = (ele) => { return danContainer.getBoundingClientRect().right - ele.getBoundingClientRect().right; }; + const danSpeed = (ele) => { + return (danWidth + ele.offsetWidth) / 5; + }; + const getTunnel = (ele) => { + const tmp = danWidth / danSpeed(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) { + const danRight = danItemRight(item[j]); + if (danRight <= 640 - (tmp * danSpeed(item[j])) || danRight <= 0) { break; } if (j === item.length - 1) { @@ -550,7 +612,7 @@ xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { - this.dan = JSON.parse(xhr.responseText).danmaku; + this.dan = JSON.parse(xhr.responseText).danmaku.sort((a, b) => a.time - b.time); console.log(this.dan); // autoplay @@ -591,26 +653,7 @@ if (this.playedTime) { clearInterval(this.playedTime); } - 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.setTime(); this.element.classList.add('dplayer-playing'); this.trigger('play'); } diff --git a/src/DPlayer.scss b/src/DPlayer.scss index 89f377c..81616b2 100644 --- a/src/DPlayer.scss +++ b/src/DPlayer.scss @@ -39,6 +39,20 @@ } } + .dplayer-mask { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 1; + display: none; + + &.dplayer-mask-show { + display: block; + } + } + .dplayer-video-wrap { position: relative; background: #000; @@ -58,7 +72,7 @@ right: 0; top: 0; bottom: 0; - font-size: 24px; + font-size: 22px; color: #fff; .dplayer-danmaku-item { @@ -200,6 +214,10 @@ &:hover { opacity: 1; } + + &.dplayer-comment-icon { + padding: 10px 9px 9px; + } } .dplayer-svg-shadow { @@ -294,6 +312,7 @@ padding: 7px 0; transition: all .3s ease-in-out; overflow: hidden; + z-index: 2; &.dplayer-setting-box-open { transform: translateX(0); @@ -319,6 +338,11 @@ } } + .dplayer-comment { + display: inline-block; + height: 100%; + } + .dplayer-label { color: #eee; font-size: 13px;