diff --git a/README.md b/README.md index 48df264..8b80e9d 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,6 @@ ## Introduction -**Notice:** This player is still under development. - [Demo](http://diygod.github.io/DPlayer/demo/) Screenshot @@ -58,7 +56,8 @@ var option = { danmaku: { // Optional, showing danmaku id: '9E2E3368B56CDBB4', // Required, danmaku id, MUST BE UNIQUE, CAN NOT USE THESE IN YOUR NEW PLAYER: `https://dplayer.daoapp.io/list` api: 'https://dplayer.daoapp.io/', // Required, danmaku api - token: 'tokendemo' // Optional, danmaku token for api + token: 'tokendemo', // Optional, danmaku token for api + maximum: 1000 // Optional, maximum quantity of danmaku } } ``` @@ -85,9 +84,8 @@ var option = { ```js var DPlayer = require('DPlayer'); -var dp = new DPlayer({ - // ... -}); +var dp = new DPlayer(option); +dp.init(); ``` ### Danmaku back-end @@ -124,6 +122,8 @@ $ npm run build ## Todo +- [ ] 记录播放位置 记录透明度 + - [ ] 中英文切换 - [ ] 微博登录 @@ -132,6 +132,8 @@ $ npm run build - [ ] icon 动画 +- [ ] 字体 + ## LICENSE MIT © [DIYgod](http://github.com/DIYgod) diff --git a/demo/index.html b/demo/index.html index 100d3a9..38513e5 100644 --- a/demo/index.html +++ b/demo/index.html @@ -68,7 +68,8 @@ danmaku: { id: '9E2E3368B56CDBB4', api: 'https://dplayer.daoapp.io/', - token: 'tokendemo' + token: 'tokendemo', + maximum: 1000 } }); dp.init(); diff --git a/dist/DPlayer.min.css b/dist/DPlayer.min.css index c2b3400..a23dfa9 100644 --- a/dist/DPlayer.min.css +++ b/dist/DPlayer.min.css @@ -1 +1 @@ -.dplayer{position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:1}.dplayer:-webkit-full-screen{width:100%;height:100%;background:#000}.dplayer:-webkit-full-screen .dplayer-danmaku-bottom.dplayer-danmaku-move,.dplayer:-webkit-full-screen .dplayer-danmaku-top.dplayer-danmaku-move{-webkit-animation:b 8s linear!important;animation:b 8s linear!important}.dplayer:-webkit-full-screen .dplayer-danmaku-right.dplayer-danmaku-move{-webkit-animation:a 8s linear!important;animation:a 8s linear!important}.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box{height:60px}.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-comment,.dplayer.dplayer-no-danmaku .dplayer-danmaku{display:none}.dplayer.dplayer-playing .dplayer-controller,.dplayer.dplayer-playing .dplayer-controller-mask{opacity:0}.dplayer.dplayer-playing .dplayer-danmaku .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-loading .dplayer-bezel .diplayer-loading-icon{display:block}.dplayer.dplayer-loading .dplayer-danmaku .dplayer-danmaku-move{-webkit-animation-play-state:paused!important;animation-play-state:paused!important}.dplayer.dplayer-hide-controller .dplayer-controller,.dplayer.dplayer-hide-controller .dplayer-controller-mask{opacity:0;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%)}.dplayer.dplayer-show-controller .dplayer-controller,.dplayer.dplayer-show-controller .dplayer-controller-mask{opacity:1}.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;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default;white-space:nowrap;font-weight:bolder;text-shadow:.5px .5px .5px rgba(0,0,0,.5)}.dplayer .dplayer-danmaku .dplayer-danmaku-right{position:absolute;right:0;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}.dplayer .dplayer-danmaku .dplayer-danmaku-right.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-danmaku .dplayer-danmaku-bottom,.dplayer .dplayer-danmaku .dplayer-danmaku-top{position:absolute;width:100%;text-align:center;visibility:hidden}.dplayer .dplayer-danmaku .dplayer-danmaku-bottom.dplayer-danmaku-move,.dplayer .dplayer-danmaku .dplayer-danmaku-top.dplayer-danmaku-move{will-change:visibility;-webkit-animation:b 5s linear;animation:b 5s linear;-webkit-animation-play-state:paused;animation-play-state:paused}@-webkit-keyframes b{0%,to{visibility:visible}}@keyframes b{0%,to{visibility:visible}}.dplayer .dplayer-bezel{position:absolute;left:0;right:0;top:0;bottom:0;font-size:22px;color:#fff;pointer-events:none}.dplayer .dplayer-bezel .dplayer-fill{fill:hsla(0,0%,100%,.8)}.dplayer .dplayer-bezel .dplayer-bezel-icon{position:absolute;top:50%;left:50%;margin:-26px 0 0 -26px;height:52px;width:52px;padding:12px;box-sizing:border-box;background:rgba(0,0,0,.5);border-radius:50%;opacity:0;pointer-events:none}.dplayer .dplayer-bezel .dplayer-bezel-icon.dplayer-bezel-transition{-webkit-animation:c .5s linear;animation:c .5s linear}@-webkit-keyframes c{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}@keyframes c{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}.dplayer .dplayer-bezel .diplayer-loading-icon{display:none;position:absolute;top:50%;left:50%;margin:-18px 0 0 -18px;height:36px;width:36px;pointer-events:none}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-hide{display:none}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot{-webkit-animation:d .8s ease infinite;animation:d .8s ease infinite;opacity:0;fill:#fff;-webkit-transform-origin:4px 4px;-ms-transform-origin:4px 4px;transform-origin:4px 4px}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-7{-webkit-animation-delay:.7s;animation-delay:.7s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-6{-webkit-animation-delay:.6s;animation-delay:.6s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-5{-webkit-animation-delay:.5s;animation-delay:.5s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-4{-webkit-animation-delay:.4s;animation-delay:.4s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-3{-webkit-animation-delay:.3s;animation-delay:.3s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-2{-webkit-animation-delay:.2s;animation-delay:.2s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-1{-webkit-animation-delay:.1s;animation-delay:.1s}@-webkit-keyframes d{0%{opacity:.7;-webkit-transform:scale(1.2);transform:scale(1.2)}50%{-webkit-transform:scale(.9);transform:scale(.9)}50%,to{opacity:.25}to{-webkit-transform:scale(.85);transform:scale(.85)}}@keyframes d{0%{opacity:.7;-webkit-transform:scale(1.2);transform:scale(1.2)}50%{-webkit-transform:scale(.9);transform:scale(.9)}50%,to{opacity:.25}to{-webkit-transform:scale(.85);transform:scale(.85)}}.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;will-change:width}.dplayer .dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played{position:absolute;left:0;top:0;bottom:0;height:3px;will-change:width}.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-icon.dplayer-setting-icon{padding-top:8.5px}.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;will-change:width}.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:90px;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-setting .dplayer-setting-danmaku{padding:5px 0}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-label{padding:0 10px;display:inline}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-label{display:none}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-danmaku-bar-wrap{display:inline-block}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-label{display:none}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-danmaku-bar-wrap{display:inline-block}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap{padding:0 10px;box-sizing:border-box;display:none;vertical-align:middle;height:100%;width:100%}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar{position:relative;top:8.5px;width:100%;height:3px;background:#fff;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-bar-inner{position:absolute;bottom:0;left:0;height:100%;-webkit-transition:all .1s ease;transition:all .1s ease;background:#aaa;will-change:width}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-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;background:#aaa}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment{display:inline-block;height:100%}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box{position:absolute;right:0;bottom:50px;-webkit-transform:translateX(382px);-ms-transform:translateX(382px);transform:translateX(382px);border-radius:2px;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;z-index:2}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box.dplayer-comment-box-open{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-icon{height:24px;width:24px;position:absolute;top:5px;left:7px;padding:0;opacity:1}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-icon:hover .dplayer-fill{fill:#aaa}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-icon .dplayer-fill{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;fill:#ddd}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-icon .dplayer-svg-shadow{stroke:none}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box{position:absolute;background:#fff;bottom:40px;left:-82.5px;box-shadow:0 0 25px rgba(0,0,0,.3);border-radius:4px;padding:5px;font-size:14px;width:193px;-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-comment .dplayer-comment-box .dplayer-comment-setting-box.dplayer-comment-setting-open{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box:after{content:'';position:absolute;top:100%;left:50%;margin-left:-12px;background:url('data:image/svg+xml;utf8,');width:24px;height:12px}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box input[type=radio]{display:none}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box label{cursor:pointer}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type{width:44px;float:left;margin-right:5px}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type span{padding:4px 6px;line-height:16px;display:inline-block;border-radius:4px}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type span:hover{-webkit-animation:e 5s infinite ease-in-out;animation:e 5s infinite ease-in-out}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type input:checked+span{background:#aaa;color:#fff}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color{font-size:0}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color label{font-size:0;padding:6px;display:inline-block}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span{width:24px;height:24px;display:inline-block;border-radius:7px;box-sizing:border-box;cursor:pointer}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span:hover{-webkit-animation:e 5s infinite ease-in-out;animation:e 5s infinite ease-in-out;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color input:checked+span{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);border:none!important}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-input{outline:none;border:none;padding:8px 31px;font-size:14px;line-height:18px;text-align:center;border-radius:4px;width:300px}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-send-icon{height:22px;width:22px;position:absolute;top:6px;right:7px;padding:0;opacity:1}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-send-icon:hover .dplayer-fill{fill:#aaa}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-send-icon .dplayer-fill{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;fill:#ddd}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-send-icon .dplayer-svg-shadow{stroke:none}.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}.dplayer .dplayer-menu{position:absolute;width:150px;border-radius:2px;background:rgba(28,28,28,.9);padding:7px 0;overflow:hidden;z-index:3;display:none}.dplayer .dplayer-menu.dplayer-menu-show{display:block}.dplayer .dplayer-menu .dplayer-menu-item{height:30px;padding:5px 10px;box-sizing:border-box;cursor:pointer}.dplayer .dplayer-menu .dplayer-menu-item:hover{background-color:hsla(0,0%,100%,.1)}.dplayer .dplayer-menu .dplayer-menu-item .dplayer-menu-label a{color:#eee;font-size:13px;display:inline-block;vertical-align:middle}@-webkit-keyframes e{2%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}4%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}6%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}8%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}10%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}12%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}14%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}16%{-webkit-transform:translateY(-.5px) rotate(-1.5deg);transform:translateY(-.5px) rotate(-1.5deg)}18%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}20%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}22%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}24%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}26%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}28%{-webkit-transform:translateY(.5px) rotate(1.5deg);transform:translateY(.5px) rotate(1.5deg)}30%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}32%,34%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}36%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}38%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}40%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}42%{-webkit-transform:translateY(2.5px) rotate(-1.5deg);transform:translateY(2.5px) rotate(-1.5deg)}44%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}46%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}48%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}50%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}52%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}54%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}56%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}58%{-webkit-transform:translateY(.5px) rotate(2.5deg);transform:translateY(.5px) rotate(2.5deg)}60%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}62%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}64%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}66%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}68%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}70%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}72%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}74%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}76%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}78%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}80%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}82%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}84%{-webkit-transform:translateY(1.5px) rotate(2.5deg);transform:translateY(1.5px) rotate(2.5deg)}86%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}88%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}90%{-webkit-transform:translateY(2.5px) rotate(-.5deg);transform:translateY(2.5px) rotate(-.5deg)}92%{-webkit-transform:translateY(.5px) rotate(-.5deg);transform:translateY(.5px) rotate(-.5deg)}94%{-webkit-transform:translateY(2.5px) rotate(.5deg);transform:translateY(2.5px) rotate(.5deg)}96%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}98%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}0%,to{-webkit-transform:translate(0) rotate(0deg);transform:translate(0) rotate(0deg)}}@keyframes e{2%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}4%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}6%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}8%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}10%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}12%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}14%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}16%{-webkit-transform:translateY(-.5px) rotate(-1.5deg);transform:translateY(-.5px) rotate(-1.5deg)}18%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}20%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}22%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}24%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}26%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}28%{-webkit-transform:translateY(.5px) rotate(1.5deg);transform:translateY(.5px) rotate(1.5deg)}30%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}32%,34%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}36%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}38%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}40%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}42%{-webkit-transform:translateY(2.5px) rotate(-1.5deg);transform:translateY(2.5px) rotate(-1.5deg)}44%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}46%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}48%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}50%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}52%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}54%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}56%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}58%{-webkit-transform:translateY(.5px) rotate(2.5deg);transform:translateY(.5px) rotate(2.5deg)}60%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}62%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}64%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}66%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}68%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}70%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}72%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}74%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}76%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}78%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}80%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}82%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}84%{-webkit-transform:translateY(1.5px) rotate(2.5deg);transform:translateY(1.5px) rotate(2.5deg)}86%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}88%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}90%{-webkit-transform:translateY(2.5px) rotate(-.5deg);transform:translateY(2.5px) rotate(-.5deg)}92%{-webkit-transform:translateY(.5px) rotate(-.5deg);transform:translateY(.5px) rotate(-.5deg)}94%{-webkit-transform:translateY(2.5px) rotate(.5deg);transform:translateY(2.5px) rotate(.5deg)}96%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}98%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}0%,to{-webkit-transform:translate(0) rotate(0deg);transform:translate(0) rotate(0deg)}} \ No newline at end of file +.dplayer{position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:1}.dplayer:-webkit-full-screen{width:100%;height:100%;background:#000}.dplayer:-webkit-full-screen .dplayer-danmaku .dplayer-danmaku-bottom.dplayer-danmaku-move,.dplayer:-webkit-full-screen .dplayer-danmaku .dplayer-danmaku-top.dplayer-danmaku-move{-webkit-animation:b 6s linear;animation:b 6s linear;-webkit-animation-play-state:paused;animation-play-state:paused}.dplayer:-webkit-full-screen .dplayer-danmaku .dplayer-danmaku-right.dplayer-danmaku-move{-webkit-animation:a 8s linear;animation:a 8s linear;-webkit-animation-play-state:paused;animation-play-state:paused}.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box{height:60px}.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-comment,.dplayer.dplayer-no-danmaku .dplayer-danmaku{display:none}.dplayer.dplayer-playing .dplayer-controller,.dplayer.dplayer-playing .dplayer-controller-mask{opacity:0}.dplayer.dplayer-playing .dplayer-danmaku .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-loading .dplayer-bezel .diplayer-loading-icon{display:block}.dplayer.dplayer-loading .dplayer-danmaku .dplayer-danmaku-move{-webkit-animation-play-state:paused!important;animation-play-state:paused!important}.dplayer.dplayer-hide-controller .dplayer-controller,.dplayer.dplayer-hide-controller .dplayer-controller-mask{opacity:0;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%)}.dplayer.dplayer-show-controller .dplayer-controller,.dplayer.dplayer-show-controller .dplayer-controller-mask{opacity:1}.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;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default;white-space:nowrap;font-weight:bolder;text-shadow:.5px .5px .5px rgba(0,0,0,.5)}.dplayer .dplayer-danmaku .dplayer-danmaku-right{position:absolute;right:0;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}.dplayer .dplayer-danmaku .dplayer-danmaku-right.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-danmaku .dplayer-danmaku-bottom,.dplayer .dplayer-danmaku .dplayer-danmaku-top{position:absolute;width:100%;text-align:center;visibility:hidden}.dplayer .dplayer-danmaku .dplayer-danmaku-bottom.dplayer-danmaku-move,.dplayer .dplayer-danmaku .dplayer-danmaku-top.dplayer-danmaku-move{will-change:visibility;-webkit-animation:b 4s linear;animation:b 4s linear;-webkit-animation-play-state:paused;animation-play-state:paused}@-webkit-keyframes b{0%,to{visibility:visible}}@keyframes b{0%,to{visibility:visible}}.dplayer .dplayer-bezel{position:absolute;left:0;right:0;top:0;bottom:0;font-size:22px;color:#fff;pointer-events:none}.dplayer .dplayer-bezel .dplayer-fill{fill:hsla(0,0%,100%,.8)}.dplayer .dplayer-bezel .dplayer-bezel-icon{position:absolute;top:50%;left:50%;margin:-26px 0 0 -26px;height:52px;width:52px;padding:12px;box-sizing:border-box;background:rgba(0,0,0,.5);border-radius:50%;opacity:0;pointer-events:none}.dplayer .dplayer-bezel .dplayer-bezel-icon.dplayer-bezel-transition{-webkit-animation:c .5s linear;animation:c .5s linear}@-webkit-keyframes c{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}@keyframes c{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}.dplayer .dplayer-bezel .diplayer-loading-icon{display:none;position:absolute;top:50%;left:50%;margin:-18px 0 0 -18px;height:36px;width:36px;pointer-events:none}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-hide{display:none}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot{-webkit-animation:d .8s ease infinite;animation:d .8s ease infinite;opacity:0;fill:#fff;-webkit-transform-origin:4px 4px;-ms-transform-origin:4px 4px;transform-origin:4px 4px}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-7{-webkit-animation-delay:.7s;animation-delay:.7s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-6{-webkit-animation-delay:.6s;animation-delay:.6s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-5{-webkit-animation-delay:.5s;animation-delay:.5s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-4{-webkit-animation-delay:.4s;animation-delay:.4s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-3{-webkit-animation-delay:.3s;animation-delay:.3s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-2{-webkit-animation-delay:.2s;animation-delay:.2s}.dplayer .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-1{-webkit-animation-delay:.1s;animation-delay:.1s}@-webkit-keyframes d{0%{opacity:.7;-webkit-transform:scale(1.2);transform:scale(1.2)}50%{-webkit-transform:scale(.9);transform:scale(.9)}50%,to{opacity:.25}to{-webkit-transform:scale(.85);transform:scale(.85)}}@keyframes d{0%{opacity:.7;-webkit-transform:scale(1.2);transform:scale(1.2)}50%{-webkit-transform:scale(.9);transform:scale(.9)}50%,to{opacity:.25}to{-webkit-transform:scale(.85);transform:scale(.85)}}.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;will-change:width}.dplayer .dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played{position:absolute;left:0;top:0;bottom:0;height:3px;will-change:width}.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-icon.dplayer-setting-icon{padding-top:8.5px}.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;will-change:width}.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:90px;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-setting .dplayer-setting-danmaku{padding:5px 0}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-label{padding:0 10px;display:inline}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-label{display:none}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-danmaku-bar-wrap{display:inline-block}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-label{display:none}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-danmaku-bar-wrap{display:inline-block}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap{padding:0 10px;box-sizing:border-box;display:none;vertical-align:middle;height:100%;width:100%}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar{position:relative;top:8.5px;width:100%;height:3px;background:#fff;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-bar-inner{position:absolute;bottom:0;left:0;height:100%;-webkit-transition:all .1s ease;transition:all .1s ease;background:#aaa;will-change:width}.dplayer .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-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;background:#aaa}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment{display:inline-block;height:100%}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box{position:absolute;right:0;bottom:50px;-webkit-transform:translateX(382px);-ms-transform:translateX(382px);transform:translateX(382px);border-radius:2px;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;z-index:2}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box.dplayer-comment-box-open{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-icon{height:24px;width:24px;position:absolute;top:5px;left:7px;padding:0;opacity:1}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-icon:hover .dplayer-fill{fill:#aaa}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-icon .dplayer-fill{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;fill:#ddd}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box{position:absolute;background:#fff;bottom:40px;left:-82.5px;box-shadow:0 0 25px rgba(0,0,0,.3);border-radius:4px;padding:5px;font-size:14px;width:193px;-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-comment .dplayer-comment-box .dplayer-comment-setting-box.dplayer-comment-setting-open{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box:after{content:'';position:absolute;top:100%;left:50%;margin-left:-12px;background:url('data:image/svg+xml;utf8,');width:24px;height:12px}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box input[type=radio]{display:none}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box label{cursor:pointer}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type{width:44px;float:left;margin-right:5px}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type span{padding:4px 6px;line-height:16px;display:inline-block;border-radius:4px}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type span:hover{-webkit-animation:e 5s infinite ease-in-out;animation:e 5s infinite ease-in-out}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type input:checked+span{background:#aaa;color:#fff}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color{font-size:0}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color label{font-size:0;padding:6px;display:inline-block}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span{width:24px;height:24px;display:inline-block;border-radius:7px;box-sizing:border-box;cursor:pointer}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span:hover{-webkit-animation:e 5s infinite ease-in-out;animation:e 5s infinite ease-in-out;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color input:checked+span{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);border:none!important}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-comment-input{outline:none;border:none;padding:8px 31px;font-size:14px;line-height:18px;text-align:center;border-radius:4px;width:300px}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-send-icon{height:22px;width:22px;position:absolute;top:6px;right:7px;padding:0;opacity:1}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-send-icon:hover .dplayer-fill{fill:#aaa}.dplayer .dplayer-controller .dplayer-icons .dplayer-comment .dplayer-comment-box .dplayer-send-icon .dplayer-fill{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;fill:#ddd}.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}.dplayer .dplayer-menu{position:absolute;width:150px;border-radius:2px;background:rgba(28,28,28,.9);padding:5px 0;overflow:hidden;z-index:3;display:none}.dplayer .dplayer-menu.dplayer-menu-show{display:block}.dplayer .dplayer-menu .dplayer-menu-item{height:30px;padding:5px 10px;box-sizing:border-box;cursor:pointer}.dplayer .dplayer-menu .dplayer-menu-item:hover{background-color:hsla(0,0%,100%,.1)}.dplayer .dplayer-menu .dplayer-menu-item .dplayer-menu-label a{color:#eee;font-size:13px;display:inline-block;vertical-align:middle}@-webkit-keyframes e{2%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}4%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}6%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}8%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}10%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}12%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}14%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}16%{-webkit-transform:translateY(-.5px) rotate(-1.5deg);transform:translateY(-.5px) rotate(-1.5deg)}18%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}20%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}22%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}24%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}26%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}28%{-webkit-transform:translateY(.5px) rotate(1.5deg);transform:translateY(.5px) rotate(1.5deg)}30%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}32%,34%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}36%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}38%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}40%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}42%{-webkit-transform:translateY(2.5px) rotate(-1.5deg);transform:translateY(2.5px) rotate(-1.5deg)}44%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}46%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}48%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}50%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}52%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}54%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}56%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}58%{-webkit-transform:translateY(.5px) rotate(2.5deg);transform:translateY(.5px) rotate(2.5deg)}60%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}62%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}64%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}66%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}68%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}70%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}72%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}74%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}76%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}78%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}80%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}82%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}84%{-webkit-transform:translateY(1.5px) rotate(2.5deg);transform:translateY(1.5px) rotate(2.5deg)}86%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}88%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}90%{-webkit-transform:translateY(2.5px) rotate(-.5deg);transform:translateY(2.5px) rotate(-.5deg)}92%{-webkit-transform:translateY(.5px) rotate(-.5deg);transform:translateY(.5px) rotate(-.5deg)}94%{-webkit-transform:translateY(2.5px) rotate(.5deg);transform:translateY(2.5px) rotate(.5deg)}96%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}98%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}0%,to{-webkit-transform:translate(0) rotate(0deg);transform:translate(0) rotate(0deg)}}@keyframes e{2%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}4%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}6%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}8%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}10%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}12%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}14%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}16%{-webkit-transform:translateY(-.5px) rotate(-1.5deg);transform:translateY(-.5px) rotate(-1.5deg)}18%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}20%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}22%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}24%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}26%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}28%{-webkit-transform:translateY(.5px) rotate(1.5deg);transform:translateY(.5px) rotate(1.5deg)}30%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}32%,34%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}36%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}38%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}40%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}42%{-webkit-transform:translateY(2.5px) rotate(-1.5deg);transform:translateY(2.5px) rotate(-1.5deg)}44%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}46%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}48%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}50%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}52%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}54%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}56%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}58%{-webkit-transform:translateY(.5px) rotate(2.5deg);transform:translateY(.5px) rotate(2.5deg)}60%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}62%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}64%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}66%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}68%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}70%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}72%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}74%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}76%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}78%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}80%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}82%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}84%{-webkit-transform:translateY(1.5px) rotate(2.5deg);transform:translateY(1.5px) rotate(2.5deg)}86%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}88%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}90%{-webkit-transform:translateY(2.5px) rotate(-.5deg);transform:translateY(2.5px) rotate(-.5deg)}92%{-webkit-transform:translateY(.5px) rotate(-.5deg);transform:translateY(.5px) rotate(-.5deg)}94%{-webkit-transform:translateY(2.5px) rotate(.5deg);transform:translateY(2.5px) rotate(.5deg)}96%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}98%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}0%,to{-webkit-transform:translate(0) rotate(0deg);transform:translate(0) rotate(0deg)}} \ No newline at end of file diff --git a/dist/DPlayer.min.js b/dist/DPlayer.min.js index 70cef40..0f8e0e9 100644 --- a/dist/DPlayer.min.js +++ b/dist/DPlayer.min.js @@ -1,3 +1,3 @@ -"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={};for(var l=0;l\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n '+this.getSVG("play")+' \n \n '+this.getSVG("volume-down")+(' \n \n \n \n \n \n \n \n \n 0:00 / 0:00\n \n \n \n ')+this.getSVG("comment")+' \n \n '+this.getSVG("setting")+' \n \n \n \n \n 顶部\n \n \n \n 滚动\n \n \n \n 底部\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n '+this.getSVG("send")+' \n \n \n \n '+this.getSVG("setting")+' \n \n \n '+this.getSVG("full")+(' \n \n \n \n \n \n \n \n \n \n \n \n 关于作者\n 关于 DPlayer 播放器\n \n '),this.audio=this.element.getElementsByClassName("dplayer-video")[0],this.bezel=this.element.getElementsByClassName("dplayer-bezel-icon")[0],this.bezel.addEventListener("animationend",function(){e.bezel.classList.remove("dplayer-bezel-transition")}),this.ptime=this.element.getElementsByClassName("dplayer-ptime")[0],this.playButton=this.element.getElementsByClassName("dplayer-play-icon")[0],this.shouldpause=!0,this.toggle=function(){e.audio.paused?e.play():e.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);var t=function(t){var n=t.offsetLeft,a=t.offsetParent,s=void 0;if(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement)for(;null!==a&&a!==e.element;)n+=a.offsetLeft,a=a.offsetParent;else for(;null!==a;)n+=a.offsetLeft,a=a.offsetParent;return s=document.body.scrollLeft+document.documentElement.scrollLeft,n-s};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.option.danmaku&&this.audio.addEventListener("seeked",function(){for(var t=0;t=e.audio.currentTime)return void(e.danIndex=t);e.danIndex=e.dan.length}});var a=0,s=0,l=!1;this.setTime=function(){e.option.danmaku?e.playedTime=setInterval(function(){s=e.audio.currentTime,!l&&a+.01>s&&!e.audio.paused&&(e.element.classList.add("dplayer-loading"),l=!0),l&&s>a+.01&&!e.audio.paused&&(e.element.classList.remove("dplayer-loading"),l=!1),a=s,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>=parseFloat(t.time)&&(e.danmakuIn(t.text,t.color,t.type),e.danIndex++)},100):e.playedTime=setInterval(function(){s=e.audio.currentTime,!l&&a+.01>s&&!e.audio.paused&&(e.element.classList.add("dplayer-loading"),l=!0),l&&s>a+.01&&!e.audio.paused&&(e.element.classList.remove("dplayer-loading"),l=!1),a=s,e.updateBar("played",e.audio.currentTime/e.audio.duration,"width"),e.ptime.innerHTML=e.secondToTime(e.audio.currentTime),e.trigger("playing")},100)},this.bar.addEventListener("click",function(a){var s=a||window.event;n=e.bar.clientWidth;var l=(s.clientX-t(e.bar))/n;l=l>0?l:0,l=1>l?l:1,e.updateBar("played",l,"width"),e.audio.currentTime=parseFloat(e.playedBar.style.width)/100*e.audio.duration});var i=function(a){var s=a||window.event,l=(s.clientX-t(e.bar))/n;l=l>0?l:0,l=1>l?l:1,e.updateBar("played",l,"width"),e.element.getElementsByClassName("dplayer-ptime")[0].innerHTML=e.secondToTime(l*e.audio.duration)},d=function $(){document.removeEventListener("mouseup",$),document.removeEventListener("mousemove",i),e.audio.currentTime=parseFloat(e.playedBar.style.width)/100*e.audio.duration,e.setTime()};this.bar.addEventListener("mousedown",function(){n=e.bar.clientWidth,clearInterval(e.playedTime),document.addEventListener("mousemove",i),document.addEventListener("mouseup",d)}),this.volumeBar=this.element.getElementsByClassName("dplayer-volume-bar-inner")[0];var o=this.element.getElementsByClassName("dplayer-volume")[0],r=this.element.getElementsByClassName("dplayer-volume-bar-wrap")[0],c=this.element.getElementsByClassName("dplayer-volume-bar")[0],u=this.element.getElementsByClassName("dplayer-volume-icon")[0],p=35,m=function(){e.audio.volume>=.8?u.innerHTML=e.getSVG("volume-up"):e.audio.volume>0?u.innerHTML=e.getSVG("volume-down"):u.innerHTML=e.getSVG("volume-off")},y=function(n){var a=n||window.event,s=(a.clientX-t(c)-5.5)/p;s=s>0?s:0,s=1>s?s:1,e.updateBar("volume",s,"width"),e.audio.volume=s,e.audio.muted&&(e.audio.muted=!1),m()},v=function K(){document.removeEventListener("mouseup",K),document.removeEventListener("mousemove",y),o.classList.remove("dplayer-volume-active")};r.addEventListener("click",function(n){var a=n||window.event,s=(a.clientX-t(c)-5.5)/p;s=s>0?s:0,s=1>s?s:1,e.updateBar("volume",s,"width"),e.audio.volume=s,e.audio.muted&&(e.audio.muted=!1),m()}),r.addEventListener("mousedown",function(){document.addEventListener("mousemove",y),document.addEventListener("mouseup",v),o.classList.add("dplayer-volume-active")}),u.addEventListener("click",function(){e.audio.muted?(e.audio.muted=!1,m(),e.updateBar("volume",e.audio.volume,"width")):(e.audio.muted=!0,u.innerHTML=e.getSVG("volume-off"),e.updateBar("volume",0,"width"))});var h=0,g=function(){e.element.classList.remove("dplayer-hide-controller"),clearTimeout(h),h=setTimeout(function(){e.audio.played.length&&(e.element.classList.add("dplayer-hide-controller"),E(),A())},2e3)};this.element.addEventListener("mousemove",g),this.element.addEventListener("click",g),this.danOpacity=.7;var f={original:'\n \n 洗脑循环\n \n \n \n \n \n \n 速度\n '+this.getSVG("right")+(' \n \n \n 弹幕透明度\n \n \n \n \n \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 '},b=this.element.getElementsByClassName("dplayer-setting-icon")[0],k=this.element.getElementsByClassName("dplayer-setting-box")[0],L=this.element.getElementsByClassName("dplayer-mask")[0];k.innerHTML=f.original;var E=function(){k.classList.contains("dplayer-setting-box-open")&&(k.classList.remove("dplayer-setting-box-open"),L.classList.remove("dplayer-mask-show"),setTimeout(function(){k.classList.remove("dplayer-setting-box-narrow"),k.innerHTML=f.original,B()},300))},w=function(){k.classList.add("dplayer-setting-box-open"),L.classList.add("dplayer-mask-show")};L.addEventListener("click",function(){E()}),b.addEventListener("click",function(){w()});var B=function(){var n=e.element.getElementsByClassName("dplayer-setting-loop")[0],a=n.getElementsByClassName("dplayer-toggle-setting-input")[0];a.checked=e.loop,n.addEventListener("click",function(){a.checked=!a.checked,a.checked?(e.loop=!0,e.audio.loop=e.loop):(e.loop=!1,e.audio.loop=e.loop),E()}),a.addEventListener("change",function(){a.checked?(e.loop=!0,e.audio.loop=e.loop):(e.loop=!1,e.audio.loop=e.loop),E()});var s=e.element.getElementsByClassName("dplayer-setting-speed")[0];s.addEventListener("click",function(){k.classList.add("dplayer-setting-box-narrow"),k.innerHTML=f.speed;for(var t=k.getElementsByClassName("dplayer-setting-speed-item"),n=function(n){t[n].addEventListener("click",function(){e.audio.playbackRate=t[n].dataset.speed,E()})},a=0;a0?i:0,i=1>i?i:1,e.updateBar("danmaku",i,"width");for(var d=e.element.getElementsByClassName("dplayer-danmaku-item"),o=0;o0?i:0,i=1>i?i:1,e.updateBar("danmaku",i,"width");for(var d=e.element.getElementsByClassName("dplayer-danmaku-item"),o=0;o=i)break;if(l===s.length-1)return z[t][a+""].push(e),e.addEventListener("animationend",function(){z[t][a+""].splice(0,1)}),{v:a%M}}},s=0;;s++){var l=a(s);if("object"===("undefined"==typeof l?"undefined":_typeof(l)))return l.v}};this.danmakuIn=function(t,n,a){x=C.offsetWidth,q=C.offsetHeight,M=q/T;var s=document.createElement("div");switch(s.classList.add("dplayer-danmaku-item"),s.classList.add("dplayer-danmaku-"+a),s.innerHTML=t,s.style.opacity=e.danOpacity,C.appendChild(s), -s.style.color=n,a){case"right":s.style.top=T*F(s,a)+"px",s.style.width=s.offsetWidth+1+"px",s.style.transform="translateX(-"+x+"px)",s.addEventListener("animationend",function(){C.removeChild(s)});break;case"top":s.style.top=T*F(s,a)+"px",s.addEventListener("animationend",function(){C.removeChild(s)});break;case"bottom":s.style.bottom=T*F(s,a)+"px",s.addEventListener("animationend",function(){C.removeChild(s)});break;default:console.error("Can't handled danmaku type: "+a)}s.classList.add("dplayer-danmaku-move")},this.option.danmaku?!function(){e.danIndex=0;var t=new XMLHttpRequest;t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300||304===t.status?(e.dan=JSON.parse(t.responseText).danmaku.sort(function(e,t){return e.time-t.time}),e.option.autoplay&&!e.isMobile?e.play():e.isMobile&&e.pause()):console.log("Request was unsuccessful: "+t.status))},t.open("get",e.option.danmaku.api+"?id="+e.option.danmaku.id,!0),t.send(null)}():this.option.autoplay&&!this.isMobile?this.play():this.isMobile&&this.pause();var H=this.element.getElementsByClassName("dplayer-comment-input")[0],I=this.element.getElementsByClassName("dplayer-comment-icon")[0],D=this.element.getElementsByClassName("dplayer-comment-box")[0],G=this.element.getElementsByClassName("dplayer-comment-setting-icon")[0],V=this.element.getElementsByClassName("dplayer-comment-setting-box")[0],O=this.element.getElementsByClassName("dplayer-send-icon")[0],P=function(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")},R=function(){if(H.blur(),!H.value.replace(/^\s+|\s+$/g,""))return void alert("要输入弹幕内容啊喂!");var t={token:e.option.danmaku.token,player:e.option.danmaku.id,author:"DIYgod",time:e.audio.currentTime,text:H.value,color:e.element.querySelector('input[name="dplayer-danmaku-color"]:checked').value,type:e.element.querySelector('input[name="dplayer-danmaku-type"]:checked').value},n=new XMLHttpRequest;n.onreadystatechange=function(){4===n.readyState&&(n.status>=200&&n.status<300||304===n.status?console.log("Post danmaku: ",JSON.parse(n.responseText)):console.log("Request was unsuccessful: "+n.status))},n.open("post",e.option.danmaku.api,!0),n.send(JSON.stringify(t)),H.value="",A(),e.dan.splice(e.danIndex,0,t),e.danIndex++,e.danmakuIn(P(t.text),t.color,t.type)},X=function(){V.classList.contains("dplayer-comment-setting-open")&&V.classList.remove("dplayer-comment-setting-open")},_=function(){V.classList.contains("dplayer-comment-setting-open")?V.classList.remove("dplayer-comment-setting-open"):V.classList.add("dplayer-comment-setting-open")},W=0,A=function(){D.classList.contains("dplayer-comment-box-open")&&(D.classList.remove("dplayer-comment-box-open"),L.classList.remove("dplayer-mask-show"),clearInterval(W),e.element.classList.remove("dplayer-show-controller"),X(),document.addEventListener("keydown",j))},J=function(){D.classList.add("dplayer-comment-box-open"),L.classList.add("dplayer-mask-show"),W=setInterval(function(){clearTimeout(h)},1e3),e.element.classList.add("dplayer-show-controller"),document.removeEventListener("keydown",j)};L.addEventListener("click",function(){A()}),I.addEventListener("click",function(){J(),setTimeout(function(){H.focus()},300)}),G.addEventListener("click",function(){_()}),this.element.getElementsByClassName("dplayer-comment-setting-color")[0].addEventListener("click",function(){var t=e.element.querySelector('input[name="dplayer-danmaku-color"]:checked+span');t&&(G.getElementsByClassName("dplayer-fill")[0].style.fill=e.element.querySelector('input[name="dplayer-danmaku-color"]:checked').value)}),H.addEventListener("click",function(){X()}),H.addEventListener("keydown",function(e){var t=e||window.event;13===t.keyCode&&R()}),O.addEventListener("click",R);var Y=function(){x=C.offsetWidth;for(var t=e.element.getElementsByClassName("dplayer-danmaku-item"),n=0;n0?a:0,a=1>a?a:1,e.updateBar("volume",a,"width"),e.audio.volume=a,e.audio.muted&&(e.audio.muted=!1),m();break;case 40:n.preventDefault(),a=e.audio.volume-.1,a=a>0?a:0,a=1>a?a:1,e.updateBar("volume",a,"width"),e.audio.volume=a,e.audio.muted&&(e.audio.muted=!1),m()}};document.addEventListener("keydown",j),this.menu=this.element.getElementsByClassName("dplayer-menu")[0],this.element.addEventListener("contextmenu",function(t){var n=t||window.event;n.preventDefault(),e.menu.style.left=n.clientX-e.element.getBoundingClientRect().left+"px",e.menu.style.top=n.clientY-e.element.getBoundingClientRect().top+"px",e.menu.classList.add("dplayer-menu-show"),L.classList.add("dplayer-mask-show"),L.addEventListener("click",function(){L.classList.remove("dplayer-mask-show"),e.menu.classList.remove("dplayer-menu-show")})})}},{key:"play",value:function(){this.audio.paused&&(this.shouldpause=!1,this.bezel.innerHTML=this.getSVG("play"),this.bezel.classList.add("dplayer-bezel-transition"),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.shouldpause&&!this.ended||(this.shouldpause=!0,this.element.classList.remove("dplayer-loading"),this.bezel.innerHTML=this.getSVG("pause"),this.bezel.classList.add("dplayer-bezel-transition"),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={};for(var l=0;l\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n '+this.getSVG("play")+' \n \n '+this.getSVG("volume-down")+(' \n \n \n \n \n \n \n \n \n 0:00 / 0:00\n \n \n \n ')+this.getSVG("comment")+' \n \n '+this.getSVG("setting")+' \n \n \n \n \n 顶部\n \n \n \n 滚动\n \n \n \n 底部\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n '+this.getSVG("send")+' \n \n \n \n '+this.getSVG("setting")+' \n \n \n '+this.getSVG("full")+(' \n \n \n \n \n \n \n \n \n \n \n \n 关于作者\n 播放器意见反馈\n 关于 DPlayer 播放器\n \n '),this.audio=this.element.getElementsByClassName("dplayer-video")[0],this.bezel=this.element.getElementsByClassName("dplayer-bezel-icon")[0],this.bezel.addEventListener("animationend",function(){e.bezel.classList.remove("dplayer-bezel-transition")}),this.ptime=this.element.getElementsByClassName("dplayer-ptime")[0],this.playButton=this.element.getElementsByClassName("dplayer-play-icon")[0],this.shouldpause=!0,this.toggle=function(){e.audio.paused?e.play():e.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);var t=function(t){var n=t.offsetLeft,a=t.offsetParent,s=void 0;if(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement)for(;null!==a&&a!==e.element;)n+=a.offsetLeft,a=a.offsetParent;else for(;null!==a;)n+=a.offsetLeft,a=a.offsetParent;return s=document.body.scrollLeft+document.documentElement.scrollLeft,n-s};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.option.danmaku&&this.audio.addEventListener("seeking",function(){for(var t=0;t=e.audio.currentTime)return void(e.danIndex=t);e.danIndex=e.dan.length}});var a=0,s=0,l=!1;this.setTime=function(){e.playedTime=setInterval(function(){s=e.audio.currentTime,!l&&a+.01>s&&!e.audio.paused&&(e.element.classList.add("dplayer-loading"),l=!0),l&&s>a+.01&&!e.audio.paused&&(e.element.classList.remove("dplayer-loading"),l=!1),a=s,e.updateBar("played",e.audio.currentTime/e.audio.duration,"width"),e.ptime.innerHTML=e.secondToTime(e.audio.currentTime),e.trigger("playing")},100),e.option.danmaku&&(e.danmakuTime=setInterval(function(){for(var t=e.dan[e.danIndex];t&&e.audio.currentTime>=parseFloat(t.time);)e.danmakuIn(t.text,t.color,t.type),e.danIndex++,t=e.dan[e.danIndex]},0))},this.clearTime=function(){clearInterval(e.playedTime),e.option.danmaku&&clearInterval(e.danmakuTime)},this.bar.addEventListener("click",function(a){var s=a||window.event;n=e.bar.clientWidth;var l=(s.clientX-t(e.bar))/n;l=l>0?l:0,l=1>l?l:1,e.updateBar("played",l,"width"),e.audio.currentTime=parseFloat(e.playedBar.style.width)/100*e.audio.duration});var i=function(a){var s=a||window.event,l=(s.clientX-t(e.bar))/n;l=l>0?l:0,l=1>l?l:1,e.updateBar("played",l,"width"),e.element.getElementsByClassName("dplayer-ptime")[0].innerHTML=e.secondToTime(l*e.audio.duration)},d=function $(){document.removeEventListener("mouseup",$),document.removeEventListener("mousemove",i),e.audio.currentTime=parseFloat(e.playedBar.style.width)/100*e.audio.duration,e.setTime()};this.bar.addEventListener("mousedown",function(){n=e.bar.clientWidth,e.clearTime(),document.addEventListener("mousemove",i),document.addEventListener("mouseup",d)}),this.volumeBar=this.element.getElementsByClassName("dplayer-volume-bar-inner")[0];var o=this.element.getElementsByClassName("dplayer-volume")[0],r=this.element.getElementsByClassName("dplayer-volume-bar-wrap")[0],c=this.element.getElementsByClassName("dplayer-volume-bar")[0],u=this.element.getElementsByClassName("dplayer-volume-icon")[0],p=35,m=function(){e.audio.volume>=.8?u.innerHTML=e.getSVG("volume-up"):e.audio.volume>0?u.innerHTML=e.getSVG("volume-down"):u.innerHTML=e.getSVG("volume-off")},y=function(n){var a=n||window.event,s=(a.clientX-t(c)-5.5)/p;s=s>0?s:0,s=1>s?s:1,e.updateBar("volume",s,"width"),e.audio.volume=s,e.audio.muted&&(e.audio.muted=!1),m()},v=function K(){document.removeEventListener("mouseup",K),document.removeEventListener("mousemove",y),o.classList.remove("dplayer-volume-active")};r.addEventListener("click",function(n){var a=n||window.event,s=(a.clientX-t(c)-5.5)/p;s=s>0?s:0,s=1>s?s:1,e.updateBar("volume",s,"width"),e.audio.volume=s,e.audio.muted&&(e.audio.muted=!1),m()}),r.addEventListener("mousedown",function(){document.addEventListener("mousemove",y),document.addEventListener("mouseup",v),o.classList.add("dplayer-volume-active")}),u.addEventListener("click",function(){e.audio.muted?(e.audio.muted=!1,m(),e.updateBar("volume",e.audio.volume,"width")):(e.audio.muted=!0,u.innerHTML=e.getSVG("volume-off"),e.updateBar("volume",0,"width"))});var h=0,g=function(){e.element.classList.remove("dplayer-hide-controller"),clearTimeout(h),h=setTimeout(function(){e.audio.played.length&&(e.element.classList.add("dplayer-hide-controller"),E(),J())},2e3)};this.element.addEventListener("mousemove",g),this.element.addEventListener("click",g),this.danOpacity=.7;var f={original:'\n \n 洗脑循环\n \n \n \n \n \n \n 速度\n '+this.getSVG("right")+(' \n \n \n 弹幕透明度\n \n \n \n \n \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 '},b=this.element.getElementsByClassName("dplayer-setting-icon")[0],k=this.element.getElementsByClassName("dplayer-setting-box")[0],L=this.element.getElementsByClassName("dplayer-mask")[0];k.innerHTML=f.original;var E=function(){k.classList.contains("dplayer-setting-box-open")&&(k.classList.remove("dplayer-setting-box-open"),L.classList.remove("dplayer-mask-show"),setTimeout(function(){k.classList.remove("dplayer-setting-box-narrow"),k.innerHTML=f.original,B()},300))},w=function(){k.classList.add("dplayer-setting-box-open"),L.classList.add("dplayer-mask-show")};L.addEventListener("click",function(){E()}),b.addEventListener("click",function(){w()});var B=function(){var n=e.element.getElementsByClassName("dplayer-setting-loop")[0],a=n.getElementsByClassName("dplayer-toggle-setting-input")[0];a.checked=e.loop,n.addEventListener("click",function(){a.checked=!a.checked,a.checked?(e.loop=!0,e.audio.loop=e.loop):(e.loop=!1,e.audio.loop=e.loop),E()}),a.addEventListener("change",function(){a.checked?(e.loop=!0,e.audio.loop=e.loop):(e.loop=!1,e.audio.loop=e.loop),E()});var s=e.element.getElementsByClassName("dplayer-setting-speed")[0];s.addEventListener("click",function(){k.classList.add("dplayer-setting-box-narrow"),k.innerHTML=f.speed;for(var t=k.getElementsByClassName("dplayer-setting-speed-item"),n=function(n){t[n].addEventListener("click",function(){e.audio.playbackRate=t[n].dataset.speed,E()})},a=0;a0?i:0,i=1>i?i:1,e.updateBar("danmaku",i,"width");for(var d=e.element.getElementsByClassName("dplayer-danmaku-item"),o=0;o0?i:0,i=1>i?i:1,e.updateBar("danmaku",i,"width");for(var d=e.element.getElementsByClassName("dplayer-danmaku-item"),o=0;o=i)break;if(l===s.length-1)return N[t][a+""].push(e),e.addEventListener("animationend",function(){N[t][a+""].splice(0,1)}),{v:a%M}}},s=0;;s++){var l=a(s);if("object"===("undefined"==typeof l?"undefined":_typeof(l)))return l.v}};this.danmakuIn=function(t,n,a){T=x.offsetWidth,q=x.offsetHeight,M=parseInt(q/C);var s=document.createElement("div");switch(s.classList.add("dplayer-danmaku-item"),s.classList.add("dplayer-danmaku-"+a),s.innerHTML=t,s.style.opacity=e.danOpacity,x.appendChild(s),s.style.color=n,a){case"right":s.style.top=C*F(s,a)+"px", +s.style.width=s.offsetWidth+1+"px",s.style.transform="translateX(-"+T+"px)",s.addEventListener("animationend",function(){x.removeChild(s)});break;case"top":s.style.top=C*F(s,a)+"px",s.addEventListener("animationend",function(){x.removeChild(s)});break;case"bottom":s.style.bottom=C*F(s,a)+"px",s.addEventListener("animationend",function(){x.removeChild(s)});break;default:console.error("Can't handled danmaku type: "+a)}s.classList.add("dplayer-danmaku-move")},this.option.danmaku?!function(){e.danIndex=0;var t=new XMLHttpRequest;t.onreadystatechange=function(){if(4===t.readyState)if(t.status>=200&&t.status<300||304===t.status){var n=JSON.parse(t.responseText);1!==n.code?alert(n.msg):(e.option.danmaku.maximum?(e.maximum=parseInt(e.option.danmaku.maximum),e.dan=n.danmaku.splice(-e.maximum,e.maximum).sort(function(e,t){return e.time-t.time})):e.dan=n.danmaku.sort(function(e,t){return e.time-t.time}),e.option.autoplay&&!e.isMobile?e.play():e.isMobile&&e.pause())}else console.log("Request was unsuccessful: "+t.status)},t.open("get",e.option.danmaku.api+"?id="+e.option.danmaku.id,!0),t.send(null)}():this.option.autoplay&&!this.isMobile?this.play():this.isMobile&&this.pause();var I=this.element.getElementsByClassName("dplayer-comment-input")[0],H=this.element.getElementsByClassName("dplayer-comment-icon")[0],D=this.element.getElementsByClassName("dplayer-comment-box")[0],G=this.element.getElementsByClassName("dplayer-comment-setting-icon")[0],V=this.element.getElementsByClassName("dplayer-comment-setting-box")[0],O=this.element.getElementsByClassName("dplayer-send-icon")[0],P=function(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")},R=function(){if(I.blur(),!I.value.replace(/^\s+|\s+$/g,""))return void alert("要输入弹幕内容啊喂!");var t={token:e.option.danmaku.token,player:e.option.danmaku.id,author:"DIYgod",time:e.audio.currentTime,text:I.value,color:e.element.querySelector('input[name="dplayer-danmaku-color"]:checked').value,type:e.element.querySelector('input[name="dplayer-danmaku-type"]:checked').value},n=new XMLHttpRequest;n.onreadystatechange=function(){if(4===n.readyState)if(n.status>=200&&n.status<300||304===n.status){var e=JSON.parse(n.responseText);1!==e.code?alert(e.msg):console.log("Post danmaku: ",JSON.parse(n.responseText))}else console.log("Request was unsuccessful: "+n.status)},n.open("post",e.option.danmaku.api,!0),n.send(JSON.stringify(t)),I.value="",J(),e.dan.splice(e.danIndex,0,t),e.danIndex++,e.danmakuIn(P(t.text),t.color,t.type)},X=function(){V.classList.contains("dplayer-comment-setting-open")&&V.classList.remove("dplayer-comment-setting-open")},_=function(){V.classList.contains("dplayer-comment-setting-open")?V.classList.remove("dplayer-comment-setting-open"):V.classList.add("dplayer-comment-setting-open")},W=0,J=function(){D.classList.contains("dplayer-comment-box-open")&&(D.classList.remove("dplayer-comment-box-open"),L.classList.remove("dplayer-mask-show"),clearInterval(W),e.element.classList.remove("dplayer-show-controller"),X(),document.addEventListener("keydown",j))},Y=function(){D.classList.add("dplayer-comment-box-open"),L.classList.add("dplayer-mask-show"),W=setInterval(function(){clearTimeout(h)},1e3),e.element.classList.add("dplayer-show-controller"),document.removeEventListener("keydown",j)};L.addEventListener("click",function(){J()}),H.addEventListener("click",function(){Y(),setTimeout(function(){I.focus()},300)}),G.addEventListener("click",function(){_()}),this.element.getElementsByClassName("dplayer-comment-setting-color")[0].addEventListener("click",function(){var t=e.element.querySelector('input[name="dplayer-danmaku-color"]:checked+span');t&&(G.getElementsByClassName("dplayer-fill")[0].style.fill=e.element.querySelector('input[name="dplayer-danmaku-color"]:checked').value)}),I.addEventListener("click",function(){X()}),I.addEventListener("keydown",function(e){var t=e||window.event;13===t.keyCode&&R()}),O.addEventListener("click",R);var A=function(){T=x.offsetWidth;for(var t=e.element.getElementsByClassName("dplayer-danmaku-item"),n=0;n0?a:0,a=1>a?a:1,e.updateBar("volume",a,"width"),e.audio.volume=a,e.audio.muted&&(e.audio.muted=!1),m();break;case 40:n.preventDefault(),a=e.audio.volume-.1,a=a>0?a:0,a=1>a?a:1,e.updateBar("volume",a,"width"),e.audio.volume=a,e.audio.muted&&(e.audio.muted=!1),m()}};document.addEventListener("keydown",j),this.menu=this.element.getElementsByClassName("dplayer-menu")[0],this.element.addEventListener("contextmenu",function(t){var n=t||window.event;n.preventDefault(),e.menu.style.left=n.clientX-e.element.getBoundingClientRect().left+"px",e.menu.style.top=n.clientY-e.element.getBoundingClientRect().top+"px",e.menu.classList.add("dplayer-menu-show"),L.classList.add("dplayer-mask-show"),L.addEventListener("click",function(){L.classList.remove("dplayer-mask-show"),e.menu.classList.remove("dplayer-menu-show")})})}},{key:"play",value:function(){this.audio.paused&&(this.shouldpause=!1,this.bezel.innerHTML=this.getSVG("play"),this.bezel.classList.add("dplayer-bezel-transition"),this.playButton.innerHTML=this.getSVG("pause"),this.audio.play(),this.playedTime&&this.clearTime(),this.setTime(),this.element.classList.add("dplayer-playing"),this.trigger("play"))}},{key:"pause",value:function(){this.shouldpause&&!this.ended||(this.shouldpause=!0,this.element.classList.remove("dplayer-loading"),this.bezel.innerHTML=this.getSVG("pause"),this.bezel.classList.add("dplayer-bezel-transition"),this.ended=!1,this.playButton.innerHTML=this.getSVG("play"),this.audio.pause(),this.clearTime(),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 b56b8fe..9c0b768 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","comment","comment-off","send","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","trigger","_i","value","_this2","danmaku","classList","add","innerHTML","video","pic","url","audio","bezel","addEventListener","remove","ptime","playButton","shouldpause","toggle","paused","getElementViewLeft","actualLeft","offsetLeft","current","offsetParent","elementScrollLeft","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","body","scrollLeft","documentElement","playedBar","loadedBar","bar","barWidth","dan","time","currentTime","danIndex","lastPlayPos","currentPlayPos","bufferingDetected","setTime","playedTime","setInterval","duration","item","parseFloat","danmakuIn","text","color","e","window","clientWidth","clientX","width","thumbMove","thumbUp","removeEventListener","clearInterval","volumeBar","volumeEle","volumeBarWrapWrap","volumeBarWrap","volumeicon","vWidth","switchVolumeIcon","volume","volumeMove","muted","volumeUp","hideTime","hideController","clearTimeout","setTimeout","played","closeSetting","closeComment","danOpacity","settingHTML","original","speed","settingIcon","settingBox","mask","contains","settingEvent","openSetting","loopEle","loopToggle","checked","speedEle","speedItem","_loop","playbackRate","dataset","danmakuBar","danmakuBarWrapWrap","danmakuBarWrap","danmakuSettingBox","dWidth","danmakuMove","items","opacity","danmakuUp","buffered","end","ended","danContainer","itemHeight","danWidth","danHeight","itemY","danTunnel","top","bottom","danItemRight","ele","getBoundingClientRect","danSpeed","offsetWidth","getTunnel","tmp","_loop2","splice","v","j","danRight","push","_ret3","offsetHeight","createElement","appendChild","transform","removeChild","console","error","xhr","XMLHttpRequest","onreadystatechange","readyState","status","JSON","parse","responseText","sort","a","b","log","open","api","id","commentInput","commentIcon","commentBox","commentSettingIcon","commentSettingBox","commentSendIcon","htmlEncode","str","replace","sendComment","blur","alert","danmakuData","token","player","author","querySelector","stringify","closeCommentSetting","toggleCommentSetting","disableHide","handleKeyDown","openComment","focus","sele","fill","keyCode","resetAnimation","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","preventDefault","menu","left","clientY","name","func","module","exports"],"mappings":"AAAA,YAMA,SAASA,iBAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAJhH,GAAIC,SAA4B,kBAAXC,SAAoD,gBAApBA,QAAOC,SAAwB,SAAUC,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAXF,SAAyBE,EAAIC,cAAgBH,OAAS,eAAkBE,IAEtOE,aAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUb,EAAaoB,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBR,EAAYsB,UAAWF,GAAiBC,GAAab,EAAiBR,EAAaqB,GAAqBrB,OAJhiB,WASI,GAPMuB,GAAA,WAOF,QAPEA,GAOUC,GASR,GAAIC,GAAQC,IAEZ5B,iBAAgB4B,KAlBlBH,GAQEG,KAAKC,KACDC,MAAS,YAAa,uJACtBC,OAAU,YAAa,4LACvBC,aAAc,YAAa,qsCAC3BC,eAAgB,YAAa,wfAC7BC,cAAe,YAAa,yMAC5BC,MAAS,YAAa,sbACtBC,MAAS,YAAa,irBACtBC,SAAY,YAAa,2zGACzBC,OAAU,YAAa,oFACvBC,SAAY,YAAa,kzBACzBC,eAAgB,YAAa,obAC7BC,MAAS,YAAa,kHAE1Bb,KAAKc,OAAS,SAACC,GACX,MAAA,8GAC2FhB,EAAKE,IAAIc,GAAM,GAAf,iGAC5BA,EAAA,mEACvBhB,EAAKE,IAAIc,GAAM,GAAf,iBAAkCA,EAAA,2DAK9Ef,KAAKgB,SAAWC,UAAUC,UAAUC,MAAM,6CAEtCnB,KAAKgB,WACLlB,EAAOsB,UAAW,EA3BN,IA+BVC,IACFC,QAASC,SAASC,uBAAuB,WAAW,GACpDJ,UAAU,EACVK,MAAO,UACPlB,MAAM,EAEV,KAAK,GAAImB,KAAcL,GACfA,EAAcM,eAAeD,KAAgB5B,EAAO6B,eAAeD,KACnE5B,EAAO4B,GAAcL,EAAcK,GAI3C1B,MAAKF,OAASA,EACdE,KAAKO,KAAOT,EAAOS,KA5CHP,KAoDX4B,aAAe,SAACC,GACjB,GAAMC,GAAO,SAACC,GACV,MAAa,IAANA,EAAW,IAAMA,EAAM,GAAKA,GAEjCC,EAAMC,SAASJ,EAAS,IACxBK,EAAMD,SAASJ,EAAe,GAANG,EAC9B,OAAOF,GAAKE,GAAO,IAAMF,EAAKI,IA1DlBlC,KAoEXmC,UAAY,SAACpB,EAAMqB,EAAYC,GAChCD,EAAaA,EAAa,EAAIA,EAAa,EAC3CA,EAA0B,EAAbA,EAAiBA,EAAa,EAC3CrC,EAAKgB,EAAO,OAAOuB,MAAMD,GAA0B,IAAbD,EAAmB,KAvE7CpC,KA2EXuC,YAAc,OAAQ,QAAS,UAAW,UAAW,QAAS,SACnEvC,KAAKwC,QACL,KAAK,GAAIvD,GAAI,EAAGA,EAAIe,KAAKuC,WAAWrD,OAAQD,IACxCe,KAAKwC,MAAMxC,KAAKuC,WAAWtD,MAE/Be,MAAKyC,QAAU,SAAC1B,GACZ,IAAK,GAAI2B,GAAI,EAAGA,EAAI3C,EAAKyC,MAAMzB,GAAM7B,OAAQwD,IACzC3C,EAAKyC,MAAMzB,GAAM2B,MA43B7B,MA32BA7D,cA1GEgB,IA2GEJ,IAAK,OACLkD,MAAO,WACH,GAAIC,GAAS5C,IAXjBA,MAAKsB,QAAUtB,KAAKF,OAAOwB,QACtBtB,KAAKF,OAAO+C,SACb7C,KAAKsB,QAAQwB,UAAUC,IAAI,sBAG/B/C,KAAKsB,QAAQ0B,UAAY,2JAGchD,KAAKF,OAAOmD,MAAMC,IAAlB,WAAmClD,KAAKF,OAAOmD,MAAMC,IAAlB,IAAnC,IAAA,2CACZlD,KAAKF,OAAOmD,MAAME,IAAlB,y8EAuCXnD,KAAKc,OAAO,QA3CH,sJA+CLd,KAAKc,OAAO,gBA/CP,qQAmDsEd,KAAKF,OAAO2B,MAAZ,+FAClBzB,KAAKF,OAAO2B,MAAZ,0hBAUzDzB,KAAKc,OAAO,WA9DP,gLAkEDd,KAAKc,OAAO,WAlEX,muHAwHDd,KAAKc,OAAO,QAxHX,oOA8HLd,KAAKc,OAAO,WA9HP,mMAmITd,KAAKc,OAAO,SAnIH,6TAyIkDd,KAAKF,OAAO2B,MAAZ,sFACNzB,KAAKF,OAAO2B,MAAZ,+hBAhJlEzB,KA4JEoD,MAAQpD,KAAKsB,QAAQE,uBAAuB,iBAAiB,GAElExB,KAAKqD,MAAQrD,KAAKsB,QAAQE,uBAAuB,sBAAsB,GACvExB,KAAKqD,MAAMC,iBAAiB,eAAgB,WACxCV,EAAKS,MAAMP,UAAUS,OAAO,8BAGhCvD,KAAKwD,MAAQxD,KAAKsB,QAAQE,uBAAuB,iBAAiB,GAnK/DxB,KAsKEyD,WAAazD,KAAKsB,QAAQE,uBAAuB,qBAAqB,GAC3ExB,KAAK0D,aAAc,EACnB1D,KAAK2D,OAAS,WACNf,EAAKQ,MAAMQ,OACXhB,EAAK1C,OAGL0C,EAAKzC,SAGbH,KAAKyD,WAAWH,iBAAiB,QAAStD,KAAK2D,QAC/C3D,KAAKsB,QAAQE,uBAAuB,sBAAsB,GAAG8B,iBAAiB,QAAStD,KAAK2D,QAC5F3D,KAAKsB,QAAQE,uBAAuB,2BAA2B,GAAG8B,iBAAiB,QAAStD,KAAK2D,OAlL9F,IAyLGE,GAAqB,SAACvC,GACxB,GAAIwC,GAAaxC,EAAQyC,WACrBC,EAAU1C,EAAQ2C,aAClBC,EAAA,MACJ,IAAK3C,SAAS4C,mBAAsB5C,SAAS6C,sBAAyB7C,SAAS8C,wBAO3E,KAAmB,OAAZL,GAAoBA,IAAYpB,EAAKtB,SACxCwC,GAAcE,EAAQD,WACtBC,EAAUA,EAAQC,iBARtB,MAAmB,OAAZD,GACHF,GAAcE,EAAQD,WACtBC,EAAUA,EAAQC,YAU1B,OADAC,GAAoB3C,SAAS+C,KAAKC,WAAahD,SAASiD,gBAAgBD,WACjET,EAAaI,EAuBxBlE,MAAKyE,UAAYzE,KAAKsB,QAAQE,uBAAuB,kBAAkB,GACvExB,KAAK0E,UAAY1E,KAAKsB,QAAQE,uBAAuB,kBAAkB,GACvExB,KAAK2E,IAAM3E,KAAKsB,QAAQE,uBAAuB,oBAAoB,EACnE,IAAIoD,GAAA,MAEA5E,MAAKF,OAAO+C,SACZ7C,KAAKoD,MAAME,iBAAiB,SAAU,WAClC,IAAK,GAAIrE,GAAI,EAAGA,EAAI2D,EAAKiC,IAAI3F,OAAQD,IAAK,CACtC,GAAI2D,EAAKiC,IAAI5F,GAAG6F,MAAQlC,EAAKQ,MAAM2B,YAE/B,YADAnC,EAAKoC,SAAW/F,EAGpB2D,GAAKoC,SAAWpC,EAAKiC,IAAI3F,SAKrC,IAAI+F,GAAc,EACdC,EAAiB,EACjBC,GAAoB,CACxBnF,MAAKoF,QAAU,WACPxC,EAAK9C,OAAO+C,QACZD,EAAKyC,WAAaC,YAAY,WAE1BJ,EAAiBtC,EAAKQ,MAAM2B,aACvBI,GACoBF,EAAc,IAAhCC,IACCtC,EAAKQ,MAAMQ,SACfhB,EAAKtB,QAAQwB,UAAUC,IAAI,mBAC3BoC,GAAoB,GAEpBA,GACGD,EAAkBD,EAAc,MAC/BrC,EAAKQ,MAAMQ,SACfhB,EAAKtB,QAAQwB,UAAUS,OAAO,mBAC9B4B,GAAoB,GAExBF,EAAcC,EAEdtC,EAAKT,UAAU,SAAUS,EAAKQ,MAAM2B,YAAcnC,EAAKQ,MAAMmC,SAAU,SACvE3C,EAAKY,MAAMR,UAAYJ,EAAKhB,aAAagB,EAAKQ,MAAM2B,aACpDnC,EAAKH,QAAQ,UAEb,IAAM+C,GAAO5C,EAAKiC,IAAIjC,EAAKoC,SACvBQ,IAAQ5C,EAAKQ,MAAM2B,aAAeU,WAAWD,EAAKV,QAClDlC,EAAK8C,UAAUF,EAAKG,KAAMH,EAAKI,MAAOJ,EAAKzE,MAC3C6B,EAAKoC,aAEV,KAGHpC,EAAKyC,WAAaC,YAAY,WAE1BJ,EAAiBtC,EAAKQ,MAAM2B,aACvBI,GACoBF,EAAc,IAAhCC,IACCtC,EAAKQ,MAAMQ,SACfhB,EAAKtB,QAAQwB,UAAUC,IAAI,mBAC3BoC,GAAoB,GAEpBA,GACGD,EAAkBD,EAAc,MAC/BrC,EAAKQ,MAAMQ,SACfhB,EAAKtB,QAAQwB,UAAUS,OAAO,mBAC9B4B,GAAoB,GAExBF,EAAcC,EAEdtC,EAAKT,UAAU,SAAUS,EAAKQ,MAAM2B,YAAcnC,EAAKQ,MAAMmC,SAAU,SACvE3C,EAAKY,MAAMR,UAAYJ,EAAKhB,aAAagB,EAAKQ,MAAM2B,aACpDnC,EAAKH,QAAQ,YACd,MAIXzC,KAAK2E,IAAIrB,iBAAiB,QAAS,SAACd,GAChC,GAAMqD,GAAIrD,GAASsD,OAAOtD,KAC1BoC,GAAWhC,EAAK+B,IAAIoB,WACpB,IAAI3D,IAAcyD,EAAEG,QAAUnC,EAAmBjB,EAAK+B,MAAQC,CAC9DxC,GAAaA,EAAa,EAAIA,EAAa,EAC3CA,EAA0B,EAAbA,EAAiBA,EAAa,EAC3CQ,EAAKT,UAAU,SAAUC,EAAY,SACrCQ,EAAKQ,MAAM2B,YAAcU,WAAW7C,EAAK6B,UAAUnC,MAAM2D,OAAS,IAAMrD,EAAKQ,MAAMmC,UAGvF,IAAMW,GAAY,SAAC1D,GACf,GAAMqD,GAAIrD,GAASsD,OAAOtD,MACtBJ,GAAcyD,EAAEG,QAAUnC,EAAmBjB,EAAK+B,MAAQC,CAC9DxC,GAAaA,EAAa,EAAIA,EAAa,EAC3CA,EAA0B,EAAbA,EAAiBA,EAAa,EAC3CQ,EAAKT,UAAU,SAAUC,EAAY,SACrCQ,EAAKtB,QAAQE,uBAAuB,iBAAiB,GAAGwB,UAAYJ,EAAKhB,aAAaQ,EAAaQ,EAAKQ,MAAMmC,WAG5GY,EAAU,QAAVA,KACF5E,SAAS6E,oBAAoB,UAAWD,GACxC5E,SAAS6E,oBAAoB,YAAaF,GAC1CtD,EAAKQ,MAAM2B,YAAcU,WAAW7C,EAAK6B,UAAUnC,MAAM2D,OAAS,IAAMrD,EAAKQ,MAAMmC,SACnF3C,EAAKwC,UAGTpF,MAAK2E,IAAIrB,iBAAiB,YAAa,WACnCsB,EAAWhC,EAAK+B,IAAIoB,YACpBM,cAAczD,EAAKyC,YACnB9D,SAAS+B,iBAAiB,YAAa4C,GACvC3E,SAAS+B,iBAAiB,UAAW6C,KA1UtCnG,KAiVEsG,UAAYtG,KAAKsB,QAAQE,uBAAuB,4BAA4B,EACjF,IAAM+E,GAAYvG,KAAKsB,QAAQE,uBAAuB,kBAAkB,GAClEgF,EAAoBxG,KAAKsB,QAAQE,uBAAuB,2BAA2B,GACnFiF,EAAgBzG,KAAKsB,QAAQE,uBAAuB,sBAAsB,GAC1EkF,EAAa1G,KAAKsB,QAAQE,uBAAuB,uBAAuB,GACxEmF,EAAS,GACTC,EAAmB,WACjBhE,EAAKQ,MAAMyD,QAAU,GACrBH,EAAW1D,UAAYJ,EAAK9B,OAAO,aAE9B8B,EAAKQ,MAAMyD,OAAS,EACzBH,EAAW1D,UAAYJ,EAAK9B,OAAO,eAGnC4F,EAAW1D,UAAYJ,EAAK9B,OAAO,eAGrCgG,EAAa,SAACtE,GAChB,GAAMqD,GAAIrD,GAASsD,OAAOtD,MACtBJ,GAAcyD,EAAEG,QAAUnC,EAAmB4C,GAAiB,KAAOE,CACzEvE,GAAaA,EAAa,EAAIA,EAAa,EAC3CA,EAA0B,EAAbA,EAAiBA,EAAa,EAC3CQ,EAAKT,UAAU,SAAUC,EAAY,SACrCQ,EAAKQ,MAAMyD,OAASzE,EAChBQ,EAAKQ,MAAM2D,QACXnE,EAAKQ,MAAM2D,OAAQ,GAEvBH,KAEEI,EAAW,QAAXA,KACFzF,SAAS6E,oBAAoB,UAAWY,GACxCzF,SAAS6E,oBAAoB,YAAaU,GAC1CP,EAAUzD,UAAUS,OAAO,yBAG/BiD,GAAkBlD,iBAAiB,QAAS,SAACd,GACzC,GAAMqD,GAAIrD,GAASsD,OAAOtD,MACtBJ,GAAcyD,EAAEG,QAAUnC,EAAmB4C,GAAiB,KAAOE,CACzEvE,GAAaA,EAAa,EAAIA,EAAa,EAC3CA,EAA0B,EAAbA,EAAiBA,EAAa,EAC3CQ,EAAKT,UAAU,SAAUC,EAAY,SACrCQ,EAAKQ,MAAMyD,OAASzE,EAChBQ,EAAKQ,MAAM2D,QACXnE,EAAKQ,MAAM2D,OAAQ,GAEvBH,MAEJJ,EAAkBlD,iBAAiB,YAAa,WAC5C/B,SAAS+B,iBAAiB,YAAawD,GACvCvF,SAAS+B,iBAAiB,UAAW0D,GACrCT,EAAUzD,UAAUC,IAAI,2BAE5B2D,EAAWpD,iBAAiB,QAAS,WAC7BV,EAAKQ,MAAM2D,OACXnE,EAAKQ,MAAM2D,OAAQ,EACnBH,IACAhE,EAAKT,UAAU,SAAUS,EAAKQ,MAAMyD,OAAQ,WAG5CjE,EAAKQ,MAAM2D,OAAQ,EACnBL,EAAW1D,UAAYJ,EAAK9B,OAAO,cACnC8B,EAAKT,UAAU,SAAU,EAAG,WA9YjC,IAsZC8E,GAAW,EACTC,EAAiB,WACnBtE,EAAKtB,QAAQwB,UAAUS,OAAO,2BAC9B4D,aAAaF,GACbA,EAAWG,WAAW,WACdxE,EAAKQ,MAAMiE,OAAOnI,SAClB0D,EAAKtB,QAAQwB,UAAUC,IAAI,2BAC3BuE,IACAC,MAEL,KAEPvH,MAAKsB,QAAQgC,iBAAiB,YAAa4D,GAC3ClH,KAAKsB,QAAQgC,iBAAiB,QAAS4D,GAnapClH,KAyaEwH,WAAa,EAClB,IAAMC,IACFC,SAAY,orBAWI1H,KAAKc,OAAO,UAXhB,0aAkBiF,IAAlBd,KAAKwH,WAAL,4OAM3EG,MAAA,2kCAsBEC,EAAc5H,KAAKsB,QAAQE,uBAAuB,wBAAwB,GAC1EqG,EAAa7H,KAAKsB,QAAQE,uBAAuB,uBAAuB,GACxEsG,EAAO9H,KAAKsB,QAAQE,uBAAuB,gBAAgB,EACjEqG,GAAW7E,UAAYyE,EAAYC,QAEnC,IAAMJ,GAAe,WACbO,EAAW/E,UAAUiF,SAAS,8BAC9BF,EAAW/E,UAAUS,OAAO,4BAC5BuE,EAAKhF,UAAUS,OAAO,qBACtB6D,WAAW,WACPS,EAAW/E,UAAUS,OAAO,8BAC5BsE,EAAW7E,UAAYyE,EAAYC,SACnCM,KACD,OAGLC,EAAc,WAChBJ,EAAW/E,UAAUC,IAAI,4BACzB+E,EAAKhF,UAAUC,IAAI,qBAGvB+E,GAAKxE,iBAAiB,QAAS,WAC3BgE,MAEJM,EAAYtE,iBAAiB,QAAS,WAClC2E,KAGJ,IAAMD,GAAe,WAEjB,GAAME,GAAUtF,EAAKtB,QAAQE,uBAAuB,wBAAwB,GACtE2G,EAAaD,EAAQ1G,uBAAuB,gCAAgC,EAElF2G,GAAWC,QAAUxF,EAAKrC,KAE1B2H,EAAQ5E,iBAAiB,QAAS,WAC9B6E,EAAWC,SAAWD,EAAWC,QAC7BD,EAAWC,SACXxF,EAAKrC,MAAO,EACZqC,EAAKQ,MAAM7C,KAAOqC,EAAKrC,OAGvBqC,EAAKrC,MAAO,EACZqC,EAAKQ,MAAM7C,KAAOqC,EAAKrC,MAE3B+G,MAEJa,EAAW7E,iBAAiB,SAAU,WAC9B6E,EAAWC,SACXxF,EAAKrC,MAAO,EACZqC,EAAKQ,MAAM7C,KAAOqC,EAAKrC,OAGvBqC,EAAKrC,MAAO,EACZqC,EAAKQ,MAAM7C,KAAOqC,EAAKrC,MAE3B+G,KA5BmB,IAgCjBe,GAAWzF,EAAKtB,QAAQE,uBAAuB,yBAAyB,EAC9E6G,GAAS/E,iBAAiB,QAAS,WAC/BuE,EAAW/E,UAAUC,IAAI,8BACzB8E,EAAW7E,UAAYyE,EAAYE,KAGnC,KAAK,GADCW,GAAYT,EAAWrG,uBAAuB,8BAlM5C+G,EAAQ,SAmMPtJ,GACLqJ,EAAUrJ,GAAGqE,iBAAiB,QAAS,WACnCV,EAAKQ,MAAMoF,aAAeF,EAAUrJ,GAAGwJ,QAAQd,MAC/CL,OAHCrI,EAAI,EAAGA,EAAIqJ,EAAUpJ,OAAQD,IA3L9BsJ,EA2LCtJ,KAQT2D,EAAK9C,OAAO+C,UA9LR,WAgMJD,EAAK8F,WAAa9F,EAAKtB,QAAQE,uBAAuB,6BAA6B,EACnF,IAAMmH,GAAqB/F,EAAKtB,QAAQE,uBAAuB,4BAA4B,GACrFoH,EAAiBhG,EAAKtB,QAAQE,uBAAuB,uBAAuB,GAC5EqH,EAAoBjG,EAAKtB,QAAQE,uBAAuB,2BAA2B,GACnFsH,EAAS,GACflG,GAAKT,UAAU,UAAWS,EAAK4E,WAAY,QAE3C,IAAMuB,GAAc,SAACvG,GACjB,GAAMqD,GAAIrD,GAASsD,OAAOtD,MACtBJ,GAAcyD,EAAEG,QAAUnC,EAAmB+E,IAAmBE,CACpE1G,GAAaA,EAAa,EAAIA,EAAa,EAC3CA,EAA0B,EAAbA,EAAiBA,EAAa,EAC3CQ,EAAKT,UAAU,UAAWC,EAAY,QAEtC,KAAK,GADC4G,GAAQpG,EAAKtB,QAAQE,uBAAuB,wBACzCvC,EAAI,EAAGA,EAAI+J,EAAM9J,OAAQD,IAC9B+J,EAAM/J,GAAGqD,MAAM2G,QAAU7G,CAE7BQ,GAAK4E,WAAapF,GAEhB8G,EAAY,QAAZA,KACF3H,SAAS6E,oBAAoB,UAAW8C,GACxC3H,SAAS6E,oBAAoB,YAAa2C,GAC1CF,EAAkB/F,UAAUS,OAAO,kCAGvCoF,GAAmBrF,iBAAiB,QAAS,SAACd,GAC1C,GAAMqD,GAAIrD,GAASsD,OAAOtD,MACtBJ,GAAcyD,EAAEG,QAAUnC,EAAmB+E,IAAmBE,CACpE1G,GAAaA,EAAa,EAAIA,EAAa,EAC3CA,EAA0B,EAAbA,EAAiBA,EAAa,EAC3CQ,EAAKT,UAAU,UAAWC,EAAY,QAEtC,KAAK,GADC4G,GAAQpG,EAAKtB,QAAQE,uBAAuB,wBACzCvC,EAAI,EAAGA,EAAI+J,EAAM9J,OAAQD,IAC9B+J,EAAM/J,GAAGqD,MAAM2G,QAAU7G,CAE7BQ,GAAK4E,WAAapF,IAEtBuG,EAAmBrF,iBAAiB,YAAa,WAC7C/B,SAAS+B,iBAAiB,YAAayF,GACvCxH,SAAS+B,iBAAiB,UAAW4F,GACrCL,EAAkB/F,UAAUC,IAAI,uCAI5CiF,KAjlBGhI,KAwlBEoD,MAAME,iBAAiB,iBAAkB,WACd,IAAxBV,EAAKQ,MAAMmC,WACX3C,EAAKtB,QAAQE,uBAAuB,iBAAiB,GAAGwB,UAAYJ,EAAKhB,aAAagB,EAAKQ,MAAMmC,aA1lBtGvF,KA+lBEoD,MAAME,iBAAiB,WAAY,WACpC,GAAMlB,GAAaQ,EAAKQ,MAAM+F,SAASjK,OAAS0D,EAAKQ,MAAM+F,SAASC,IAAIxG,EAAKQ,MAAM+F,SAASjK,OAAS,GAAK0D,EAAKQ,MAAMmC,SAAW,CAChI3C,GAAKT,UAAU,SAAUC,EAAY,WAjmBtCpC,KAqmBEoD,MAAME,iBAAiB,QAAS,WACjCV,EAAKtB,QAAQE,uBAAuB,iBAAiB,GAAGwB,UAAxD,oBACAJ,EAAKH,QAAQ,WAvmBdzC,KA2mBEoD,MAAME,iBAAiB,UAAW,WACnCV,EAAKH,QAAQ,aA5mBdzC,KAgnBEqJ,OAAQ,EACbrJ,KAAKoD,MAAME,iBAAiB,QAAS,WACjCV,EAAKT,UAAU,SAAU,EAAG,SACvBS,EAAKrC,OACNqC,EAAKyG,OAAQ,EACbzG,EAAKzC,QACLyC,EAAKH,QAAQ,YAtnBlBzC,KA2nBEoD,MAAMyD,OAAS5E,SAASjC,KAAKsB,QAAQE,uBAAuB,4BAA4B,GAAGc,MAAM2D,OAAS,IA3nB5GjG,KA8nBEoD,MAAM7C,KAAOP,KAAKO,KAGK,IAAxBP,KAAKoD,MAAMmC,WACXvF,KAAKsB,QAAQE,uBAAuB,iBAAiB,GAAGwB,UAAYhD,KAAKoD,MAAMmC,SAAWvF,KAAK4B,aAAa5B,KAAKoD,MAAMmC,UAAY,QAloBpI,IAyoBG+D,GAAetJ,KAAKsB,QAAQE,uBAAuB,mBAAmB,GACtE+H,EAAa,GACfC,EAAA,OACAC,EAAA,OACAC,EAAA,OACAC,GACAjJ,SACAkJ,OACAC,WAGEC,EAAe,SAACC,GAClB,MAAOT,GAAaU,wBAAwBtJ,MAAQqJ,EAAIC,wBAAwBtJ,OAG9EuJ,EAAW,SAACF,GACd,OAAQP,EAAWO,EAAIG,aAAe,GAGpCC,EAAY,SAACJ,EAAKhJ,GAGpB,IAAK,GAFCqJ,GAAMZ,EAAWS,EAASF,GA3LxBM,EAAS,SA6LRpL,GACL,GAAIuG,GAAOmE,EAAU5I,GAAM9B,EAAI,GAC/B,KAAIuG,IAAQA,EAAKtG,OAoBb,MAJAyK,GAAU5I,GAAM9B,EAAI,KAAO8K,GAC3BA,EAAIzG,iBAAiB,eAAgB,WACjCqG,EAAU5I,GAAM9B,EAAI,IAAIqL,OAAO,EAAG,MAzL9BC,EA2LDtL,EAAIyK,EAnBX,KAAK,GAAIc,GAAI,EAAGA,EAAIhF,EAAKtG,OAAQsL,IAAK,CAClC,GAAMC,GAAWX,EAAatE,EAAKgF,IAAM,EACzC,IAAIC,GAAY,IAAOL,EAAMH,EAASzE,EAAKgF,KAAoB,GAAZC,EAC/C,KAEJ,IAAID,IAAMhF,EAAKtG,OAAS,EAKpB,MAJAyK,GAAU5I,GAAM9B,EAAI,IAAIyL,KAAKX,GAC7BA,EAAIzG,iBAAiB,eAAgB,WACjCqG,EAAU5I,GAAM9B,EAAI,IAAIqL,OAAO,EAAG,MA1L9BC,EA4LDtL,EAAIyK,KAblBzK,EAAI,GAAKA,IAAK,CA/Jf,GAAI0L,GAAQN,EA+JXpL,EA7JD,IAAsE,YAAhD,mBAAV0L,GAAwB,YAAcnM,QAAQmM,IAAsB,MAAOA,GAAMJ,GAwLzGvK,MAAK0F,UAAY,SAACC,EAAMC,EAAO7E,GAC3ByI,EAAWF,EAAaY,YACxBT,EAAYH,EAAasB,aACzBlB,EAAQD,EAAYF,CACpB,IAAI/D,GAAOjE,SAASsJ,cAAT,MAWX,QAVArF,EAAK1C,UAAUC,IAAf,wBACAyC,EAAK1C,UAAUC,IAAf,mBAAsChC,GACtCyE,EAAKxC,UAAY2C,EACjBH,EAAKlD,MAAM2G,QAAUrG,EAAK4E,WARU8B,EAWvBwB,YAAYtF;AAXWA,EAc/BlD,MAAMsD,MAAQA,EACX7E,GACJ,IAAK,QACDyE,EAAKlD,MAAMsH,IAAML,EAAaY,EAAU3E,EAAMzE,GAAQ,KACtDyE,EAAKlD,MAAM2D,MAAQT,EAAM0E,YAAc,EAAK,KAC5C1E,EAAKlD,MAAMyI,UAAX,eAAsCvB,EAAA,MACtChE,EAAKlC,iBAAiB,eAAgB,WAClCgG,EAAa0B,YAAYxF,IAE7B,MARR,KASS,MACDA,EAAKlD,MAAMsH,IAAML,EAAaY,EAAU3E,EAAMzE,GAAQ,KACtDyE,EAAKlC,iBAAiB,eAAgB,WAClCgG,EAAa0B,YAAYxF,IAE7B,MAdR,KAeS,SACDA,EAAKlD,MAAMuH,OAASN,EAAaY,EAAU3E,EAAMzE,GAAQ,KACzDyE,EAAKlC,iBAAiB,eAAgB,WAClCgG,EAAa0B,YAAYxF,IAE7B,MApBR,SAsBQyF,QAAQC,MAAR,+BAA6CnK,GArCjByE,EAyC/B1C,UAAUC,IAAf,yBAIA/C,KAAKF,OAAO+C,SAnLR,WAoLJD,EAAKoC,SAAW,CAChB,IAAMmG,GAAM,GAAIC,eAChBD,GAAIE,mBAAqB,WACE,IAAnBF,EAAIG,aACAH,EAAII,QAAU,KAAOJ,EAAII,OAAS,KAAsB,MAAfJ,EAAII,QAC7C3I,EAAKiC,IAAM2G,KAAKC,MAAMN,EAAIO,cAAc7I,QAAQ8I,KAAK,SAACC,EAAGC,GAlL7C,MAkLmDD,GAAE9G,KAAO+G,EAAE/G,OAGtElC,EAAK9C,OAAOsB,WAAawB,EAAK5B,SAC9B4B,EAAK1C,OAEA0C,EAAK5B,UACV4B,EAAKzC,SAIT8K,QAAQa,IAAI,6BAA+BX,EAAII,UAI3DJ,EAAIY,KAAK,MAAOnJ,EAAK9C,OAAO+C,QAAQmJ,IAAM,OAASpJ,EAAK9C,OAAO+C,QAAQoJ,IAAI,GAC3Ed,EAAItK,KAAK,SAILb,KAAKF,OAAOsB,WAAapB,KAAKgB,SAC9BhB,KAAKE,OAEAF,KAAKgB,UACVhB,KAAKG,OArwBV,IA6wBG+L,GAAelM,KAAKsB,QAAQE,uBAAuB,yBAAyB,GAC5E2K,EAAcnM,KAAKsB,QAAQE,uBAAuB,wBAAwB,GAC1E4K,EAAapM,KAAKsB,QAAQE,uBAAuB,uBAAuB,GACxE6K,EAAqBrM,KAAKsB,QAAQE,uBAAuB,gCAAgC,GACzF8K,EAAoBtM,KAAKsB,QAAQE,uBAAuB,+BAA+B,GACvF+K,EAAkBvM,KAAKsB,QAAQE,uBAAuB,qBAAqB,GAE3EgL,EAAa,SAACC,GAChB,MAAOA,GAAIC,QAAQ,KAAM,SACpBA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,UACdA,QAAQ,MAAO,WAGlBC,EAAc,WAAM,GACtBT,EAAaU,QAGRV,EAAavJ,MAAM+J,QAAQ,aAAc,IAE1C,WADAG,OAAM,aAIV,IAAMC,IACFC,MAAOnK,EAAK9C,OAAO+C,QAAQkK,MAC3BC,OAAQpK,EAAK9C,OAAO+C,QAAQoJ,GAC5BgB,OAAQ,SACRnI,KAAMlC,EAAKQ,MAAM2B,YACjBY,KAAMuG,EAAavJ,MACnBiD,MAAOhD,EAAKtB,QAAQ4L,cAAc,+CAA+CvK,MACjF5B,KAAM6B,EAAKtB,QAAQ4L,cAAc,8CAA8CvK,OAE7EwI,EAAM,GAAIC,eAChBD,GAAIE,mBAAqB,WACE,IAAnBF,EAAIG,aACAH,EAAII,QAAU,KAAOJ,EAAII,OAAS,KAAsB,MAAfJ,EAAII,OAC7CN,QAAQa,IAAI,iBAAkBN,KAAKC,MAAMN,EAAIO,eAG7CT,QAAQa,IAAI,6BAA+BX,EAAII,UAI3DJ,EAAIY,KAAK,OAAQnJ,EAAK9C,OAAO+C,QAAQmJ,KAAK,GAC1Cb,EAAItK,KAAK2K,KAAK2B,UAAUL,IAExBZ,EAAavJ,MAAQ,GACrB4E,IACA3E,EAAKiC,IAAIyF,OAAO1H,EAAKoC,SAAU,EAAG8H,GAClClK,EAAKoC,WACLpC,EAAK8C,UAAU8G,EAAWM,EAAYnH,MAAOmH,EAAYlH,MAAOkH,EAAY/L,OAG1EqM,EAAsB,WACpBd,EAAkBxJ,UAAUiF,SAAS,iCACrCuE,EAAkBxJ,UAAUS,OAAO,iCAGrC8J,EAAuB,WACrBf,EAAkBxJ,UAAUiF,SAAS,gCACrCuE,EAAkBxJ,UAAUS,OAAO,gCAGnC+I,EAAkBxJ,UAAUC,IAAI,iCAIpCuK,EAAc,EACZ/F,EAAe,WACb6E,EAAWtJ,UAAUiF,SAAS,8BAC9BqE,EAAWtJ,UAAUS,OAAO,4BAC5BuE,EAAKhF,UAAUS,OAAO,qBACtB8C,cAAciH,GACd1K,EAAKtB,QAAQwB,UAAUS,OAAO,2BAC9B6J,IACA7L,SAAS+B,iBAAiB,UAAWiK,KAGvCC,EAAc,WAChBpB,EAAWtJ,UAAUC,IAAI,4BACzB+E,EAAKhF,UAAUC,IAAI,qBACnBuK,EAAchI,YAAY,WACtB6B,aAAaF,IACd,KACHrE,EAAKtB,QAAQwB,UAAUC,IAAI,2BAC3BxB,SAAS6E,oBAAoB,UAAWmH,GAG5CzF,GAAKxE,iBAAiB,QAAS,WAC3BiE,MAEJ4E,EAAY7I,iBAAiB,QAAS,WAClCkK,IACApG,WAAW,WACP8E,EAAauB,SACd,OAEPpB,EAAmB/I,iBAAiB,QAAS,WACzC+J,MAj3BDrN,KAq3BEsB,QAAQE,uBAAuB,iCAAiC,GAAG8B,iBAAiB,QAAS,WAC9F,GAAMoK,GAAO9K,EAAKtB,QAAQ4L,cAAc,mDACpCQ,KACArB,EAAmB7K,uBAAuB,gBAAgB,GAAGc,MAAMqL,KAAO/K,EAAKtB,QAAQ4L,cAAc,+CAA+CvK,SAI5JuJ,EAAa5I,iBAAiB,QAAS,WACnC8J,MAEJlB,EAAa5I,iBAAiB,UAAW,SAACuC,GACtC,GAAMrD,GAAQqD,GAAKC,OAAOtD,KACJ,MAAlBA,EAAMoL,SACNjB,MAIRJ,EAAgBjJ,iBAAiB,QAASqJ,EAt4BvC,IA44BGkB,GAAiB,WACnBrE,EAAWF,EAAaY,WAExB,KAAK,GADClB,GAAQpG,EAAKtB,QAAQE,uBAAuB,wBACzCvC,EAAI,EAAGA,EAAI+J,EAAM9J,OAAQD,IAC9B+J,EAAM/J,GAAGqD,MAAMyI,UAAf,eAA0CvB,EAAA,MAIlDxJ,MAAKsB,QAAQgC,iBAAiB,mBAAoB,WAC9CuK,MAEJ7N,KAAKsB,QAAQgC,iBAAiB,sBAAuB,WACjDuK,MAEJ7N,KAAKsB,QAAQgC,iBAAiB,yBAA0B,WACpDuK,MAEJ7N,KAAKsB,QAAQE,uBAAuB,qBAAqB,GAAG8B,iBAAiB,QAAS,WAC7E/B,SAAS4C,mBAAsB5C,SAAS6C,sBAAyB7C,SAAS8C,wBAYvE9C,SAASuM,iBACTvM,SAASuM,mBAEJvM,SAASwM,oBACdxM,SAASwM,sBAEJxM,SAASyM,wBACdzM,SAASyM,yBAlBTpL,EAAKtB,QAAQ2M,kBACbrL,EAAKtB,QAAQ2M,oBAERrL,EAAKtB,QAAQ4M,qBAClBtL,EAAKtB,QAAQ4M,uBAERtL,EAAKtB,QAAQ6M,yBAClBvL,EAAKtB,QAAQ6M,0BAcrBN,KAp7BD,IA07BGN,GAAgB,SAAC1H,GACnB,GAAMrD,GAAQqD,GAAKC,OAAOtD,MACtBJ,EAAA,MACJ,QAAQI,EAAMoL,SACV,IAAK,IACDpL,EAAM4L,iBACNxL,EAAKe,QACL,MAJR,KAKS,IACDnB,EAAM4L,iBACNxL,EAAKQ,MAAM2B,YAAcnC,EAAKQ,MAAM2B,YAAa,CACjD,MARR,KASS,IACDvC,EAAM4L,iBACNxL,EAAKQ,MAAM2B,YAAcnC,EAAKQ,MAAM2B,YAAc,CAClD,MAZR,KAaS,IACDvC,EAAM4L,iBACNhM,EAAaQ,EAAKQ,MAAMyD,OAAS,GACjCzE,EAAaA,EAAa,EAAIA,EAAa,EAC3CA,EAA0B,EAAbA,EAAiBA,EAAa,EAC3CQ,EAAKT,UAAU,SAAUC,EAAY,SACrCQ,EAAKQ,MAAMyD,OAASzE,EAChBQ,EAAKQ,MAAM2D,QACXnE,EAAKQ,MAAM2D,OAAQ,GAEvBH,GACA,MAxBR,KAyBS,IACDpE,EAAM4L,iBACNhM,EAAaQ,EAAKQ,MAAMyD,OAAS,GACjCzE,EAAaA,EAAa,EAAIA,EAAa,EAC3CA,EAA0B,EAAbA,EAAiBA,EAAa,EAC3CQ,EAAKT,UAAU,SAAUC,EAAY,SACrCQ,EAAKQ,MAAMyD,OAASzE,EAChBQ,EAAKQ,MAAM2D,QACXnE,EAAKQ,MAAM2D,OAAQ,GAEvBH,KAIZrF,UAAS+B,iBAAiB,UAAWiK,GAp+BlCvN,KAy+BEqO,KAAOrO,KAAKsB,QAAQE,uBAAuB,gBAAgB,GAChExB,KAAKsB,QAAQgC,iBAAiB,cAAe,SAACuC,GAC1C,GAAMrD,GAAQqD,GAAKC,OAAOtD,KAC1BA,GAAM4L,iBACNxL,EAAKyL,KAAK/L,MAAMgM,KAAO9L,EAAMwD,QAAUpD,EAAKtB,QAAQ0I,wBAAwBsE,KAAO,KACnF1L,EAAKyL,KAAK/L,MAAMsH,IAAMpH,EAAM+L,QAAU3L,EAAKtB,QAAQ0I,wBAAwBJ,IAAM,KACjFhH,EAAKyL,KAAKvL,UAAUC,IAAI,qBAExB+E,EAAKhF,UAAUC,IAAI,qBACnB+E,EAAKxE,iBAAiB,QAAS,WAC3BwE,EAAKhF,UAAUS,OAAO,qBACtBX,EAAKyL,KAAKvL,UAAUS,OAAO,4BAxLnC9D,IAAK,OACLkD,MAAO,WAgMH3C,KAAKoD,MAAMQ,SACX5D,KAAK0D,aAAc,EAEnB1D,KAAKqD,MAAML,UAAYhD,KAAKc,OAAO,QACnCd,KAAKqD,MAAMP,UAAUC,IAAI,4BAEzB/C,KAAKyD,WAAWT,UAAYhD,KAAKc,OAAO,SAExCd,KAAKoD,MAAMlD,OACPF,KAAKqF,YACLgB,cAAcrG,KAAKqF,YAEvBrF,KAAKoF,UACLpF,KAAKsB,QAAQwB,UAAUC,IAAI,mBAC3B/C,KAAKyC,QAAQ,YAtLjBhD,IAAK,QACLkD,MAAO,WA6LF3C,KAAK0D,cAAe1D,KAAKqJ,QAC1BrJ,KAAK0D,aAAc,EACnB1D,KAAKsB,QAAQwB,UAAUS,OAAO,mBAE9BvD,KAAKqD,MAAML,UAAYhD,KAAKc,OAAO,SACnCd,KAAKqD,MAAMP,UAAUC,IAAI,4BAEzB/C,KAAKqJ,OAAQ,EACbrJ,KAAKyD,WAAWT,UAAYhD,KAAKc,OAAO,QACxCd,KAAKoD,MAAMjD,QACXkG,cAAcrG,KAAKqF,YACnBrF,KAAKsB,QAAQwB,UAAUS,OAAO,mBAC9BvD,KAAKyC,QAAQ,aAnLjBhD,IAAK,KACLkD,MAAO,SAyLR6L,EAAMC,GACe,kBAATA,IACPzO,KAAKwC,MAAMgM,GAAM9D,KAAK+D,OAzoC5B5O,IA8oCgB,oBAAX6O,SAAoD,mBAAnBA,QAAOC,QAC/CD,OAAOC,QAAU9O,EAGjBiG,OAAOjG,QAAUA","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 28', '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 'comment-off': ['0 0 32 32', 'M27.090 0.131h-22.731c-2.354 0-4.262 1.839-4.262 4.109v16.401c0 2.269 1.908 4.109 4.262 4.109h4.262v-2.706h8.469l-8.853 8.135 1.579 1.451 7.487-6.88h9.787c2.353 0 4.262-1.84 4.262-4.109v-16.401c0-2.27-1.909-4.109-4.262-4.109v0zM28.511 19.304c0 1.512-1.272 2.738-2.841 2.738h-8.425l-0.076-0.070-0.076 0.070h-11.311c-1.569 0-2.841-1.226-2.841-2.738v-13.696c0-1.513 1.272-2.739 2.841-2.739h19.889c1.569 0 2.841-0.142 2.841 1.37v15.064z'],\n 'send': ['0 0 32 32', 'M13.725 30l3.9-5.325-3.9-1.125v6.45zM0 17.5l11.050 3.35 13.6-11.55-10.55 12.425 11.8 3.65 6.1-23.375-32 15.5z']\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 i = 0; i < this.eventTypes.length; i++) {\n this.event[this.eventTypes[i]] = [];\n }\n this.trigger = (type) => {\n for (let i = 0; i < this.event[type].length; i++) {\n this.event[type][i]();\n }\n }\n }\n \n /**\n * AutoLink initialization function\n */\n init() {\n this.element = this.option.element;\n if (!this.option.danmaku) {\n this.element.classList.add('dplayer-no-danmaku');\n }\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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n + this.getSVG('play')\n + ` \n \n `\n + this.getSVG('volume-down')\n + ` \n \n \n \n \n \n \n \n \n 0:00 / 0:00\n \n \n \n `\n + this.getSVG('comment')\n + ` \n \n `\n + this.getSVG('setting')\n + ` \n \n \n \n \n 顶部\n \n \n \n 滚动\n \n \n \n 底部\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n + this.getSVG('send')\n + ` \n \n \n \n `\n + this.getSVG('setting')\n + ` \n \n \n `\n + this.getSVG('full')\n + ` \n \n \n \n \n \n \n \n \n \n \n \n 关于作者\n 关于 DPlayer 播放器\n \n `;\n \n // get this audio object\n this.audio = this.element.getElementsByClassName('dplayer-video')[0];\n\n this.bezel = this.element.getElementsByClassName('dplayer-bezel-icon')[0];\n this.bezel.addEventListener('animationend', () => {\n this.bezel.classList.remove('dplayer-bezel-transition');\n });\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.shouldpause = true;\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 \n /**\n * control play progress\n */\n // get element's view position\n const getElementViewLeft = (element) => {\n let actualLeft = element.offsetLeft;\n let current = element.offsetParent;\n let elementScrollLeft;\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n }\n else {\n while (current !== null && current !== this.element) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n }\n elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n return actualLeft - elementScrollLeft;\n };\n \n const getElementViewTop = (element) => {\n let actualTop = element.offsetTop;\n let current = element.offsetParent;\n let elementScrollTop;\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n while (current !== null) {\n actualTop += current.offsetTop;\n current = current.offsetParent;\n }\n }\n else {\n while (current !== null && current !== this.element) {\n actualTop += current.offsetTop;\n current = current.offsetParent;\n }\n }\n elementScrollTop = document.body.scrollTop + document.documentElement.scrollTop;\n return actualTop - elementScrollTop;\n };\n \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 if (this.option.danmaku) {\n this.audio.addEventListener('seeked', () => {\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 this.danIndex = this.dan.length;\n }\n });\n }\n\n let lastPlayPos = 0;\n let currentPlayPos = 0;\n let bufferingDetected = false;\n this.setTime = () => {\n if (this.option.danmaku) {\n this.playedTime = setInterval(() => {\n // whether the video is buffering\n currentPlayPos = this.audio.currentTime;\n if (!bufferingDetected\n && currentPlayPos < (lastPlayPos + 0.01)\n && !this.audio.paused) {\n this.element.classList.add('dplayer-loading');\n bufferingDetected = true;\n }\n if (bufferingDetected\n && currentPlayPos > (lastPlayPos + 0.01)\n && !this.audio.paused) {\n this.element.classList.remove('dplayer-loading');\n bufferingDetected = false;\n }\n lastPlayPos = currentPlayPos;\n\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 >= parseFloat(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 // whether the video is buffering\n currentPlayPos = this.audio.currentTime;\n if (!bufferingDetected\n && currentPlayPos < (lastPlayPos + 0.01)\n && !this.audio.paused) {\n this.element.classList.add('dplayer-loading');\n bufferingDetected = true\n }\n if (bufferingDetected\n && currentPlayPos > (lastPlayPos + 0.01)\n && !this.audio.paused) {\n this.element.classList.remove('dplayer-loading');\n bufferingDetected = false\n }\n lastPlayPos = currentPlayPos;\n\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.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 \n /**\n * control volume\n */\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\n /**\n * auto hide controller\n */\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 closeComment();\n }\n }, 2000);\n };\n this.element.addEventListener('mousemove', hideController);\n this.element.addEventListener('click', hideController);\n \n \n /***\n * setting\n */\n this.danOpacity = 0.7;\n const settingHTML = {\n 'original': `\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 '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 if (this.option.danmaku) {\n // danmaku opacity\n this.danmakuBar = this.element.getElementsByClassName('dplayer-danmaku-bar-inner')[0];\n const danmakuBarWrapWrap = this.element.getElementsByClassName('dplayer-danmaku-bar-wrap')[0];\n const danmakuBarWrap = this.element.getElementsByClassName('dplayer-danmaku-bar')[0];\n const danmakuSettingBox = this.element.getElementsByClassName('dplayer-setting-danmaku')[0];\n const dWidth = 130;\n this.updateBar('danmaku', this.danOpacity, 'width');\n\n const danmakuMove = (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(danmakuBarWrap)) / dWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('danmaku', percentage, 'width');\n const items = this.element.getElementsByClassName('dplayer-danmaku-item');\n for (let i = 0; i < items.length; i++) {\n items[i].style.opacity = percentage;\n }\n this.danOpacity = percentage;\n };\n const danmakuUp = () => {\n document.removeEventListener('mouseup', danmakuUp);\n document.removeEventListener('mousemove', danmakuMove);\n danmakuSettingBox.classList.remove('dplayer-setting-danmaku-active');\n };\n\n danmakuBarWrapWrap.addEventListener('click', (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(danmakuBarWrap)) / dWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('danmaku', percentage, 'width');\n const items = this.element.getElementsByClassName('dplayer-danmaku-item');\n for (let i = 0; i < items.length; i++) {\n items[i].style.opacity = percentage;\n }\n this.danOpacity = percentage;\n });\n danmakuBarWrapWrap.addEventListener('mousedown', () => {\n document.addEventListener('mousemove', danmakuMove);\n document.addEventListener('mouseup', danmakuUp);\n danmakuSettingBox.classList.add('dplayer-setting-danmaku-active');\n });\n }\n };\n settingEvent();\n \n \n /**\n * audio events\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\n /**\n * danmaku display\n */\n const danContainer = this.element.getElementsByClassName('dplayer-danmaku')[0];\n const itemHeight = 30;\n let danWidth;\n let danHeight;\n let itemY;\n let danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\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, type) => {\n const tmp = danWidth / danSpeed(ele);\n\n for (let i = 0; ; i++) {\n let item = danTunnel[type][i + ''];\n if (item && item.length) {\n for (let j = 0; j < item.length; j++) {\n const danRight = danItemRight(item[j]) - 10;\n if (danRight <= 640 - (tmp * danSpeed(item[j])) || danRight <= 0) {\n break;\n }\n if (j === item.length - 1) {\n danTunnel[type][i + ''].push(ele);\n ele.addEventListener('animationend', () => {\n danTunnel[type][i + ''].splice(0, 1);\n });\n return i % itemY;\n }\n }\n }\n else {\n danTunnel[type][i + ''] = [ele];\n ele.addEventListener('animationend', () => {\n danTunnel[type][i + ''].splice(0, 1);\n });\n return i % itemY;\n }\n }\n };\n\n this.danmakuIn = (text, color, type) => {\n danWidth = danContainer.offsetWidth;\n danHeight = danContainer.offsetHeight;\n itemY = danHeight / itemHeight;\n let item = document.createElement(`div`);\n item.classList.add(`dplayer-danmaku-item`);\n item.classList.add(`dplayer-danmaku-${type}`);\n item.innerHTML = text;\n item.style.opacity = this.danOpacity;\n\n // insert\n danContainer.appendChild(item);\n\n // adjust\n item.style.color = color;\n switch (type) {\n case 'right':\n item.style.top = itemHeight * getTunnel(item, type) + 'px';\n item.style.width = (item.offsetWidth + 1) + 'px';\n item.style.transform = `translateX(-${danWidth}px)`;\n item.addEventListener('animationend', () => {\n danContainer.removeChild(item);\n });\n break;\n case 'top':\n item.style.top = itemHeight * getTunnel(item, type) + 'px';\n item.addEventListener('animationend', () => {\n danContainer.removeChild(item);\n });\n break;\n case 'bottom':\n item.style.bottom = itemHeight * getTunnel(item, type) + 'px';\n item.addEventListener('animationend', () => {\n danContainer.removeChild(item);\n });\n break;\n default:\n console.error(`Can't handled danmaku type: ${type}`);\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\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.api + '?id=' + this.option.danmaku.id, 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 * comment\n */\n const commentInput = this.element.getElementsByClassName('dplayer-comment-input')[0];\n const commentIcon = this.element.getElementsByClassName('dplayer-comment-icon')[0];\n const commentBox = this.element.getElementsByClassName('dplayer-comment-box')[0];\n const commentSettingIcon = this.element.getElementsByClassName('dplayer-comment-setting-icon')[0];\n const commentSettingBox = this.element.getElementsByClassName('dplayer-comment-setting-box')[0];\n const commentSendIcon = this.element.getElementsByClassName('dplayer-send-icon')[0];\n\n const htmlEncode = (str) => {\n return str.replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\")\n .replace(/\\//g, \"/\");\n };\n\n const sendComment = () => {\n commentInput.blur();\n\n // text can't be empty\n if (!commentInput.value.replace(/^\\s+|\\s+$/g, '')) {\n alert('要输入弹幕内容啊喂!');\n return;\n }\n\n const danmakuData = {\n token: this.option.danmaku.token,\n player: this.option.danmaku.id,\n author: 'DIYgod',\n time: this.audio.currentTime,\n text: commentInput.value,\n color: this.element.querySelector('input[name=\"dplayer-danmaku-color\"]:checked').value,\n type: this.element.querySelector('input[name=\"dplayer-danmaku-type\"]:checked').value\n };\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 console.log('Post danmaku: ', JSON.parse(xhr.responseText));\n }\n else {\n console.log('Request was unsuccessful: ' + xhr.status);\n }\n }\n };\n xhr.open('post', this.option.danmaku.api, true);\n xhr.send(JSON.stringify(danmakuData));\n\n commentInput.value = '';\n closeComment();\n this.dan.splice(this.danIndex, 0, danmakuData);\n this.danIndex++;\n this.danmakuIn(htmlEncode(danmakuData.text), danmakuData.color, danmakuData.type);\n };\n\n const closeCommentSetting = () => {\n if (commentSettingBox.classList.contains('dplayer-comment-setting-open')) {\n commentSettingBox.classList.remove('dplayer-comment-setting-open');\n }\n };\n const toggleCommentSetting = () => {\n if (commentSettingBox.classList.contains('dplayer-comment-setting-open')) {\n commentSettingBox.classList.remove('dplayer-comment-setting-open');\n }\n else {\n commentSettingBox.classList.add('dplayer-comment-setting-open');\n }\n };\n\n let disableHide = 0;\n const closeComment = () => {\n if (commentBox.classList.contains('dplayer-comment-box-open')) {\n commentBox.classList.remove('dplayer-comment-box-open');\n mask.classList.remove('dplayer-mask-show');\n clearInterval(disableHide);\n this.element.classList.remove('dplayer-show-controller');\n closeCommentSetting();\n document.addEventListener('keydown', handleKeyDown);\n }\n };\n const openComment = () => {\n commentBox.classList.add('dplayer-comment-box-open');\n mask.classList.add('dplayer-mask-show');\n disableHide = setInterval(() => {\n clearTimeout(hideTime);\n }, 1000);\n this.element.classList.add('dplayer-show-controller');\n document.removeEventListener('keydown', handleKeyDown);\n };\n\n mask.addEventListener('click', () => {\n closeComment();\n });\n commentIcon.addEventListener('click', () => {\n openComment();\n setTimeout(() => {\n commentInput.focus();\n }, 300);\n });\n commentSettingIcon.addEventListener('click', () => {\n toggleCommentSetting();\n });\n\n // comment setting box\n this.element.getElementsByClassName('dplayer-comment-setting-color')[0].addEventListener('click', () => {\n const sele = this.element.querySelector('input[name=\"dplayer-danmaku-color\"]:checked+span');\n if (sele) {\n commentSettingIcon.getElementsByClassName('dplayer-fill')[0].style.fill = this.element.querySelector('input[name=\"dplayer-danmaku-color\"]:checked').value;\n }\n });\n\n commentInput.addEventListener('click', () => {\n closeCommentSetting();\n });\n commentInput.addEventListener('keydown', (e) => {\n const event = e || window.event;\n if (event.keyCode === 13) {\n sendComment();\n }\n });\n\n commentSendIcon.addEventListener('click', sendComment);\n \n \n /**\n * full screen\n */\n const resetAnimation = () => {\n danWidth = danContainer.offsetWidth;\n const items = this.element.getElementsByClassName('dplayer-danmaku-item');\n for (let i = 0; i < items.length; i++) {\n items[i].style.transform = `translateX(-${danWidth}px)`;\n }\n };\n \n this.element.addEventListener('fullscreenchange', () => {\n resetAnimation();\n });\n this.element.addEventListener('mozfullscreenchange', () => {\n resetAnimation();\n });\n this.element.addEventListener('webkitfullscreenchange', () => {\n resetAnimation();\n });\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 }\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 resetAnimation();\n });\n\n /**\n * hot key\n */\n const handleKeyDown = (e) => {\n const event = e || window.event;\n let percentage;\n switch (event.keyCode) {\n case 32:\n event.preventDefault();\n this.toggle();\n break;\n case 37:\n event.preventDefault();\n this.audio.currentTime = this.audio.currentTime -5;\n break;\n case 39:\n event.preventDefault();\n this.audio.currentTime = this.audio.currentTime + 5;\n break;\n case 38:\n event.preventDefault();\n percentage = this.audio.volume + 0.1;\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 break;\n case 40:\n event.preventDefault();\n percentage = this.audio.volume - 0.1;\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 break;\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n /**\n * right key\n */\n this.menu = this.element.getElementsByClassName('dplayer-menu')[0];\n this.element.addEventListener('contextmenu', (e) => {\n const event = e || window.event;\n event.preventDefault();\n this.menu.style.left = event.clientX - this.element.getBoundingClientRect().left + 'px';\n this.menu.style.top = event.clientY - this.element.getBoundingClientRect().top + 'px';\n this.menu.classList.add('dplayer-menu-show');\n\n mask.classList.add('dplayer-mask-show');\n mask.addEventListener('click', () => {\n mask.classList.remove('dplayer-mask-show');\n this.menu.classList.remove('dplayer-menu-show');\n });\n });\n }\n \n /**\n * Play music\n */\n play() {\n if (this.audio.paused) {\n this.shouldpause = false;\n\n this.bezel.innerHTML = this.getSVG('play');\n this.bezel.classList.add('dplayer-bezel-transition');\n\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.shouldpause || this.ended) {\n this.shouldpause = true;\n this.element.classList.remove('dplayer-loading');\n\n this.bezel.innerHTML = this.getSVG('pause');\n this.bezel.classList.add('dplayer-bezel-transition');\n\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\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = DPlayer;\n }\n else {\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","comment-off","send","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","trigger","_i","value","_this2","danmaku","classList","add","innerHTML","video","pic","url","audio","bezel","addEventListener","remove","ptime","playButton","shouldpause","toggle","paused","getElementViewLeft","actualLeft","offsetLeft","current","offsetParent","elementScrollLeft","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","body","scrollLeft","documentElement","playedBar","loadedBar","bar","barWidth","dan","time","currentTime","danIndex","lastPlayPos","currentPlayPos","bufferingDetected","setTime","playedTime","setInterval","duration","danmakuTime","item","parseFloat","danmakuIn","text","color","clearTime","clearInterval","e","window","clientWidth","clientX","width","thumbMove","thumbUp","removeEventListener","volumeBar","volumeEle","volumeBarWrapWrap","volumeBarWrap","volumeicon","vWidth","switchVolumeIcon","volume","volumeMove","muted","volumeUp","hideTime","hideController","clearTimeout","setTimeout","played","closeSetting","closeComment","danOpacity","settingHTML","original","speed","settingIcon","settingBox","mask","contains","settingEvent","openSetting","loopEle","loopToggle","checked","speedEle","speedItem","_loop","playbackRate","dataset","danmakuBar","danmakuBarWrapWrap","danmakuBarWrap","danmakuSettingBox","dWidth","danmakuMove","items","opacity","danmakuUp","buffered","end","ended","danContainer","itemHeight","danWidth","danHeight","itemY","danTunnel","top","bottom","danItemRight","ele","getBoundingClientRect","danSpeed","offsetWidth","getTunnel","tmp","_loop2","splice","v","j","danRight","push","_ret3","offsetHeight","createElement","appendChild","transform","removeChild","console","error","xhr","XMLHttpRequest","onreadystatechange","readyState","status","response","JSON","parse","responseText","code","alert","msg","maximum","sort","a","b","log","open","api","id","commentInput","commentIcon","commentBox","commentSettingIcon","commentSettingBox","commentSendIcon","htmlEncode","str","replace","sendComment","blur","danmakuData","token","player","author","querySelector","stringify","closeCommentSetting","toggleCommentSetting","disableHide","handleKeyDown","openComment","focus","sele","fill","keyCode","resetAnimation","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","preventDefault","menu","left","clientY","name","func","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 28', '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 'comment-off': ['0 0 32 32', 'M27.090 0.131h-22.731c-2.354 0-4.262 1.839-4.262 4.109v16.401c0 2.269 1.908 4.109 4.262 4.109h4.262v-2.706h8.469l-8.853 8.135 1.579 1.451 7.487-6.88h9.787c2.353 0 4.262-1.84 4.262-4.109v-16.401c0-2.27-1.909-4.109-4.262-4.109v0zM28.511 19.304c0 1.512-1.272 2.738-2.841 2.738h-8.425l-0.076-0.070-0.076 0.070h-11.311c-1.569 0-2.841-1.226-2.841-2.738v-13.696c0-1.513 1.272-2.739 2.841-2.739h19.889c1.569 0 2.841-0.142 2.841 1.37v15.064z'],\n 'send': ['0 0 32 32', 'M13.725 30l3.9-5.325-3.9-1.125v6.45zM0 17.5l11.050 3.35 13.6-11.55-10.55 12.425 11.8 3.65 6.1-23.375-32 15.5z']\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 i = 0; i < this.eventTypes.length; i++) {\n this.event[this.eventTypes[i]] = [];\n }\n this.trigger = (type) => {\n for (let i = 0; i < this.event[type].length; i++) {\n this.event[type][i]();\n }\n }\n }\n \n /**\n * AutoLink initialization function\n */\n init() {\n this.element = this.option.element;\n if (!this.option.danmaku) {\n this.element.classList.add('dplayer-no-danmaku');\n }\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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n + this.getSVG('play')\n + ` \n \n `\n + this.getSVG('volume-down')\n + ` \n \n \n \n \n \n \n \n \n 0:00 / 0:00\n \n \n \n `\n + this.getSVG('comment')\n + ` \n \n `\n + this.getSVG('setting')\n + ` \n \n \n \n \n 顶部\n \n \n \n 滚动\n \n \n \n 底部\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n + this.getSVG('send')\n + ` \n \n \n \n `\n + this.getSVG('setting')\n + ` \n \n \n `\n + this.getSVG('full')\n + ` \n \n \n \n \n \n \n \n \n \n \n \n 关于作者\n 播放器意见反馈\n 关于 DPlayer 播放器\n \n `;\n \n // get this audio object\n this.audio = this.element.getElementsByClassName('dplayer-video')[0];\n\n this.bezel = this.element.getElementsByClassName('dplayer-bezel-icon')[0];\n this.bezel.addEventListener('animationend', () => {\n this.bezel.classList.remove('dplayer-bezel-transition');\n });\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.shouldpause = true;\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 \n /**\n * control play progress\n */\n // get element's view position\n const getElementViewLeft = (element) => {\n let actualLeft = element.offsetLeft;\n let current = element.offsetParent;\n let elementScrollLeft;\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n }\n else {\n while (current !== null && current !== this.element) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n }\n elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n return actualLeft - elementScrollLeft;\n };\n \n const getElementViewTop = (element) => {\n let actualTop = element.offsetTop;\n let current = element.offsetParent;\n let elementScrollTop;\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n while (current !== null) {\n actualTop += current.offsetTop;\n current = current.offsetParent;\n }\n }\n else {\n while (current !== null && current !== this.element) {\n actualTop += current.offsetTop;\n current = current.offsetParent;\n }\n }\n elementScrollTop = document.body.scrollTop + document.documentElement.scrollTop;\n return actualTop - elementScrollTop;\n };\n \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 if (this.option.danmaku) {\n this.audio.addEventListener('seeking', () => {\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 this.danIndex = this.dan.length;\n }\n });\n }\n\n let lastPlayPos = 0;\n let currentPlayPos = 0;\n let bufferingDetected = false;\n this.setTime = () => {\n this.playedTime = setInterval(() => {\n // whether the video is buffering\n currentPlayPos = this.audio.currentTime;\n if (!bufferingDetected\n && currentPlayPos < (lastPlayPos + 0.01)\n && !this.audio.paused) {\n this.element.classList.add('dplayer-loading');\n bufferingDetected = true;\n }\n if (bufferingDetected\n && currentPlayPos > (lastPlayPos + 0.01)\n && !this.audio.paused) {\n this.element.classList.remove('dplayer-loading');\n bufferingDetected = false;\n }\n lastPlayPos = currentPlayPos;\n\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 if (this.option.danmaku) {\n this.danmakuTime = setInterval(() => {\n let item = this.dan[this.danIndex];\n while (item && this.audio.currentTime >= parseFloat(item.time)) {\n this.danmakuIn(item.text, item.color, item.type);\n this.danIndex++;\n item = this.dan[this.danIndex];\n }\n }, 0);\n }\n };\n this.clearTime = () => {\n clearInterval(this.playedTime);\n if (this.option.danmaku) {\n clearInterval(this.danmakuTime);\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.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 this.clearTime();\n document.addEventListener('mousemove', thumbMove);\n document.addEventListener('mouseup', thumbUp);\n });\n \n \n /**\n * control volume\n */\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\n /**\n * auto hide controller\n */\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 closeComment();\n }\n }, 2000);\n };\n this.element.addEventListener('mousemove', hideController);\n this.element.addEventListener('click', hideController);\n \n \n /***\n * setting\n */\n this.danOpacity = 0.7;\n const settingHTML = {\n 'original': `\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 '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 if (this.option.danmaku) {\n // danmaku opacity\n this.danmakuBar = this.element.getElementsByClassName('dplayer-danmaku-bar-inner')[0];\n const danmakuBarWrapWrap = this.element.getElementsByClassName('dplayer-danmaku-bar-wrap')[0];\n const danmakuBarWrap = this.element.getElementsByClassName('dplayer-danmaku-bar')[0];\n const danmakuSettingBox = this.element.getElementsByClassName('dplayer-setting-danmaku')[0];\n const dWidth = 130;\n this.updateBar('danmaku', this.danOpacity, 'width');\n\n const danmakuMove = (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(danmakuBarWrap)) / dWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('danmaku', percentage, 'width');\n const items = this.element.getElementsByClassName('dplayer-danmaku-item');\n for (let i = 0; i < items.length; i++) {\n items[i].style.opacity = percentage;\n }\n this.danOpacity = percentage;\n };\n const danmakuUp = () => {\n document.removeEventListener('mouseup', danmakuUp);\n document.removeEventListener('mousemove', danmakuMove);\n danmakuSettingBox.classList.remove('dplayer-setting-danmaku-active');\n };\n\n danmakuBarWrapWrap.addEventListener('click', (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(danmakuBarWrap)) / dWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('danmaku', percentage, 'width');\n const items = this.element.getElementsByClassName('dplayer-danmaku-item');\n for (let i = 0; i < items.length; i++) {\n items[i].style.opacity = percentage;\n }\n this.danOpacity = percentage;\n });\n danmakuBarWrapWrap.addEventListener('mousedown', () => {\n document.addEventListener('mousemove', danmakuMove);\n document.addEventListener('mouseup', danmakuUp);\n danmakuSettingBox.classList.add('dplayer-setting-danmaku-active');\n });\n }\n };\n settingEvent();\n \n \n /**\n * audio events\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\n /**\n * danmaku display\n */\n const danContainer = this.element.getElementsByClassName('dplayer-danmaku')[0];\n const itemHeight = 30;\n let danWidth;\n let danHeight;\n let itemY;\n let danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\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, type) => {\n const tmp = danWidth / danSpeed(ele);\n\n for (let i = 0; ; i++) {\n let item = danTunnel[type][i + ''];\n if (item && item.length) {\n for (let j = 0; j < item.length; j++) {\n const danRight = danItemRight(item[j]) - 10;\n if (danRight <= danWidth - (tmp * danSpeed(item[j])) || danRight <= 0) {\n break;\n }\n if (j === item.length - 1) {\n danTunnel[type][i + ''].push(ele);\n ele.addEventListener('animationend', () => {\n danTunnel[type][i + ''].splice(0, 1);\n });\n return i % itemY;\n }\n }\n }\n else {\n danTunnel[type][i + ''] = [ele];\n ele.addEventListener('animationend', () => {\n danTunnel[type][i + ''].splice(0, 1);\n });\n return i % itemY;\n }\n }\n };\n\n this.danmakuIn = (text, color, type) => {\n danWidth = danContainer.offsetWidth;\n danHeight = danContainer.offsetHeight;\n itemY = parseInt(danHeight / itemHeight);\n let item = document.createElement(`div`);\n item.classList.add(`dplayer-danmaku-item`);\n item.classList.add(`dplayer-danmaku-${type}`);\n item.innerHTML = text;\n item.style.opacity = this.danOpacity;\n\n // insert\n danContainer.appendChild(item);\n\n // adjust\n item.style.color = color;\n switch (type) {\n case 'right':\n item.style.top = itemHeight * getTunnel(item, type) + 'px';\n item.style.width = (item.offsetWidth + 1) + 'px';\n item.style.transform = `translateX(-${danWidth}px)`;\n item.addEventListener('animationend', () => {\n danContainer.removeChild(item);\n });\n break;\n case 'top':\n item.style.top = itemHeight * getTunnel(item, type) + 'px';\n item.addEventListener('animationend', () => {\n danContainer.removeChild(item);\n });\n break;\n case 'bottom':\n item.style.bottom = itemHeight * getTunnel(item, type) + 'px';\n item.addEventListener('animationend', () => {\n danContainer.removeChild(item);\n });\n break;\n default:\n console.error(`Can't handled danmaku type: ${type}`);\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 const response = JSON.parse(xhr.responseText);\n if (response.code !== 1) {\n alert(response.msg);\n }\n else {\n if (this.option.danmaku.maximum) {\n this.maximum = parseInt(this.option.danmaku.maximum);\n this.dan = response.danmaku.splice(-this.maximum, this.maximum).sort((a, b) => a.time - b.time);\n }\n else {\n this.dan = response.danmaku.sort((a, b) => a.time - b.time);\n }\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 }\n else {\n console.log('Request was unsuccessful: ' + xhr.status);\n }\n }\n };\n xhr.open('get', this.option.danmaku.api + '?id=' + this.option.danmaku.id, 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 * comment\n */\n const commentInput = this.element.getElementsByClassName('dplayer-comment-input')[0];\n const commentIcon = this.element.getElementsByClassName('dplayer-comment-icon')[0];\n const commentBox = this.element.getElementsByClassName('dplayer-comment-box')[0];\n const commentSettingIcon = this.element.getElementsByClassName('dplayer-comment-setting-icon')[0];\n const commentSettingBox = this.element.getElementsByClassName('dplayer-comment-setting-box')[0];\n const commentSendIcon = this.element.getElementsByClassName('dplayer-send-icon')[0];\n\n const htmlEncode = (str) => {\n return str.replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\")\n .replace(/\\//g, \"/\");\n };\n\n const sendComment = () => {\n commentInput.blur();\n\n // text can't be empty\n if (!commentInput.value.replace(/^\\s+|\\s+$/g, '')) {\n alert('要输入弹幕内容啊喂!');\n return;\n }\n\n const danmakuData = {\n token: this.option.danmaku.token,\n player: this.option.danmaku.id,\n author: 'DIYgod',\n time: this.audio.currentTime,\n text: commentInput.value,\n color: this.element.querySelector('input[name=\"dplayer-danmaku-color\"]:checked').value,\n type: this.element.querySelector('input[name=\"dplayer-danmaku-type\"]:checked').value\n };\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 const response = JSON.parse(xhr.responseText);\n if (response.code !== 1) {\n alert(response.msg);\n }\n else {\n console.log('Post danmaku: ', JSON.parse(xhr.responseText));\n }\n }\n else {\n console.log('Request was unsuccessful: ' + xhr.status);\n }\n }\n };\n xhr.open('post', this.option.danmaku.api, true);\n xhr.send(JSON.stringify(danmakuData));\n\n commentInput.value = '';\n closeComment();\n this.dan.splice(this.danIndex, 0, danmakuData);\n this.danIndex++;\n this.danmakuIn(htmlEncode(danmakuData.text), danmakuData.color, danmakuData.type);\n };\n\n const closeCommentSetting = () => {\n if (commentSettingBox.classList.contains('dplayer-comment-setting-open')) {\n commentSettingBox.classList.remove('dplayer-comment-setting-open');\n }\n };\n const toggleCommentSetting = () => {\n if (commentSettingBox.classList.contains('dplayer-comment-setting-open')) {\n commentSettingBox.classList.remove('dplayer-comment-setting-open');\n }\n else {\n commentSettingBox.classList.add('dplayer-comment-setting-open');\n }\n };\n\n let disableHide = 0;\n const closeComment = () => {\n if (commentBox.classList.contains('dplayer-comment-box-open')) {\n commentBox.classList.remove('dplayer-comment-box-open');\n mask.classList.remove('dplayer-mask-show');\n clearInterval(disableHide);\n this.element.classList.remove('dplayer-show-controller');\n closeCommentSetting();\n document.addEventListener('keydown', handleKeyDown);\n }\n };\n const openComment = () => {\n commentBox.classList.add('dplayer-comment-box-open');\n mask.classList.add('dplayer-mask-show');\n disableHide = setInterval(() => {\n clearTimeout(hideTime);\n }, 1000);\n this.element.classList.add('dplayer-show-controller');\n document.removeEventListener('keydown', handleKeyDown);\n };\n\n mask.addEventListener('click', () => {\n closeComment();\n });\n commentIcon.addEventListener('click', () => {\n openComment();\n setTimeout(() => {\n commentInput.focus();\n }, 300);\n });\n commentSettingIcon.addEventListener('click', () => {\n toggleCommentSetting();\n });\n\n // comment setting box\n this.element.getElementsByClassName('dplayer-comment-setting-color')[0].addEventListener('click', () => {\n const sele = this.element.querySelector('input[name=\"dplayer-danmaku-color\"]:checked+span');\n if (sele) {\n commentSettingIcon.getElementsByClassName('dplayer-fill')[0].style.fill = this.element.querySelector('input[name=\"dplayer-danmaku-color\"]:checked').value;\n }\n });\n\n commentInput.addEventListener('click', () => {\n closeCommentSetting();\n });\n commentInput.addEventListener('keydown', (e) => {\n const event = e || window.event;\n if (event.keyCode === 13) {\n sendComment();\n }\n });\n\n commentSendIcon.addEventListener('click', sendComment);\n \n \n /**\n * full screen\n */\n const resetAnimation = () => {\n danWidth = danContainer.offsetWidth;\n const items = this.element.getElementsByClassName('dplayer-danmaku-item');\n for (let i = 0; i < items.length; i++) {\n items[i].style.transform = `translateX(-${danWidth}px)`;\n }\n };\n \n this.element.addEventListener('fullscreenchange', () => {\n resetAnimation();\n });\n this.element.addEventListener('mozfullscreenchange', () => {\n resetAnimation();\n });\n this.element.addEventListener('webkitfullscreenchange', () => {\n resetAnimation();\n });\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 }\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 resetAnimation();\n });\n\n /**\n * hot key\n */\n const handleKeyDown = (e) => {\n const event = e || window.event;\n let percentage;\n switch (event.keyCode) {\n case 32:\n event.preventDefault();\n this.toggle();\n break;\n case 37:\n event.preventDefault();\n this.audio.currentTime = this.audio.currentTime -5;\n break;\n case 39:\n event.preventDefault();\n this.audio.currentTime = this.audio.currentTime + 5;\n break;\n case 38:\n event.preventDefault();\n percentage = this.audio.volume + 0.1;\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 break;\n case 40:\n event.preventDefault();\n percentage = this.audio.volume - 0.1;\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 break;\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n /**\n * right key\n */\n this.menu = this.element.getElementsByClassName('dplayer-menu')[0];\n this.element.addEventListener('contextmenu', (e) => {\n const event = e || window.event;\n event.preventDefault();\n this.menu.style.left = event.clientX - this.element.getBoundingClientRect().left + 'px';\n this.menu.style.top = event.clientY - this.element.getBoundingClientRect().top + 'px';\n this.menu.classList.add('dplayer-menu-show');\n\n mask.classList.add('dplayer-mask-show');\n mask.addEventListener('click', () => {\n mask.classList.remove('dplayer-mask-show');\n this.menu.classList.remove('dplayer-menu-show');\n });\n });\n }\n \n /**\n * Play music\n */\n play() {\n if (this.audio.paused) {\n this.shouldpause = false;\n\n this.bezel.innerHTML = this.getSVG('play');\n this.bezel.classList.add('dplayer-bezel-transition');\n\n this.playButton.innerHTML = this.getSVG('pause');\n\n this.audio.play();\n if (this.playedTime) {\n this.clearTime();\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.shouldpause || this.ended) {\n this.shouldpause = true;\n this.element.classList.remove('dplayer-loading');\n\n this.bezel.innerHTML = this.getSVG('pause');\n this.bezel.classList.add('dplayer-bezel-transition');\n\n this.ended = false;\n this.playButton.innerHTML = this.getSVG('play');\n this.audio.pause();\n this.clearTime();\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\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = DPlayer;\n }\n else {\n window.DPlayer = DPlayer;\n }\n})();"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index cb46f64..e0c34a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dplayer", - "version": "0.1.4", + "version": "1.0.0", "description": "Wow, such a lovely HTML5 danmaku video player", "main": "dist/DPlayer.min.js", "scripts": { diff --git a/src/DPlayer.js b/src/DPlayer.js index d286c18..e3261db 100644 --- a/src/DPlayer.js +++ b/src/DPlayer.js @@ -25,7 +25,7 @@ this.getSVG = (type) => { return ` - + `; @@ -248,6 +248,7 @@ 关于作者 + 播放器意见反馈 关于 DPlayer 播放器 `; @@ -328,7 +329,7 @@ let barWidth; if (this.option.danmaku) { - this.audio.addEventListener('seeked', () => { + this.audio.addEventListener('seeking', () => { for (let i = 0; i < this.dan.length; i++) { if (this.dan[i].time >= this.audio.currentTime) { this.danIndex = i; @@ -343,57 +344,42 @@ let currentPlayPos = 0; let bufferingDetected = false; this.setTime = () => { - if (this.option.danmaku) { - this.playedTime = setInterval(() => { - // whether the video is buffering - currentPlayPos = this.audio.currentTime; - if (!bufferingDetected - && currentPlayPos < (lastPlayPos + 0.01) - && !this.audio.paused) { - this.element.classList.add('dplayer-loading'); - bufferingDetected = true; - } - if (bufferingDetected - && currentPlayPos > (lastPlayPos + 0.01) - && !this.audio.paused) { - this.element.classList.remove('dplayer-loading'); - bufferingDetected = false; - } - lastPlayPos = currentPlayPos; + this.playedTime = setInterval(() => { + // whether the video is buffering + currentPlayPos = this.audio.currentTime; + if (!bufferingDetected + && currentPlayPos < (lastPlayPos + 0.01) + && !this.audio.paused) { + this.element.classList.add('dplayer-loading'); + bufferingDetected = true; + } + if (bufferingDetected + && currentPlayPos > (lastPlayPos + 0.01) + && !this.audio.paused) { + this.element.classList.remove('dplayer-loading'); + bufferingDetected = false; + } + lastPlayPos = currentPlayPos; - 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 >= parseFloat(item.time)) { + this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width'); + this.ptime.innerHTML = this.secondToTime(this.audio.currentTime); + this.trigger('playing'); + }, 100); + if (this.option.danmaku) { + this.danmakuTime = setInterval(() => { + let item = this.dan[this.danIndex]; + while (item && this.audio.currentTime >= parseFloat(item.time)) { this.danmakuIn(item.text, item.color, item.type); this.danIndex++; + item = this.dan[this.danIndex]; } - }, 100); + }, 0); } - else { - this.playedTime = setInterval(() => { - // whether the video is buffering - currentPlayPos = this.audio.currentTime; - if (!bufferingDetected - && currentPlayPos < (lastPlayPos + 0.01) - && !this.audio.paused) { - this.element.classList.add('dplayer-loading'); - bufferingDetected = true - } - if (bufferingDetected - && currentPlayPos > (lastPlayPos + 0.01) - && !this.audio.paused) { - this.element.classList.remove('dplayer-loading'); - bufferingDetected = false - } - lastPlayPos = currentPlayPos; - - this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width'); - this.ptime.innerHTML = this.secondToTime(this.audio.currentTime); - this.trigger('playing'); - }, 100); + }; + this.clearTime = () => { + clearInterval(this.playedTime); + if (this.option.danmaku) { + clearInterval(this.danmakuTime); } }; @@ -425,7 +411,7 @@ this.bar.addEventListener('mousedown', () => { barWidth = this.bar.clientWidth; - clearInterval(this.playedTime); + this.clearTime(); document.addEventListener('mousemove', thumbMove); document.addEventListener('mouseup', thumbUp); }); @@ -773,7 +759,7 @@ if (item && item.length) { for (let j = 0; j < item.length; j++) { const danRight = danItemRight(item[j]) - 10; - if (danRight <= 640 - (tmp * danSpeed(item[j])) || danRight <= 0) { + if (danRight <= danWidth - (tmp * danSpeed(item[j])) || danRight <= 0) { break; } if (j === item.length - 1) { @@ -798,7 +784,7 @@ this.danmakuIn = (text, color, type) => { danWidth = danContainer.offsetWidth; danHeight = danContainer.offsetHeight; - itemY = danHeight / itemHeight; + itemY = parseInt(danHeight / itemHeight); let item = document.createElement(`div`); item.classList.add(`dplayer-danmaku-item`); item.classList.add(`dplayer-danmaku-${type}`); @@ -846,14 +832,26 @@ xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { - this.dan = JSON.parse(xhr.responseText).danmaku.sort((a, b) => a.time - b.time); - - // autoplay - if (this.option.autoplay && !this.isMobile) { - this.play(); + const response = JSON.parse(xhr.responseText); + if (response.code !== 1) { + alert(response.msg); } - else if (this.isMobile) { - this.pause(); + else { + if (this.option.danmaku.maximum) { + this.maximum = parseInt(this.option.danmaku.maximum); + this.dan = response.danmaku.splice(-this.maximum, this.maximum).sort((a, b) => a.time - b.time); + } + else { + this.dan = response.danmaku.sort((a, b) => a.time - b.time); + } + + // autoplay + if (this.option.autoplay && !this.isMobile) { + this.play(); + } + else if (this.isMobile) { + this.pause(); + } } } else { @@ -916,7 +914,13 @@ xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { - console.log('Post danmaku: ', JSON.parse(xhr.responseText)); + const response = JSON.parse(xhr.responseText); + if (response.code !== 1) { + alert(response.msg); + } + else { + console.log('Post danmaku: ', JSON.parse(xhr.responseText)); + } } else { console.log('Request was unsuccessful: ' + xhr.status); @@ -1128,7 +1132,7 @@ this.audio.play(); if (this.playedTime) { - clearInterval(this.playedTime); + this.clearTime(); } this.setTime(); this.element.classList.add('dplayer-playing'); @@ -1150,7 +1154,7 @@ this.ended = false; this.playButton.innerHTML = this.getSVG('play'); this.audio.pause(); - clearInterval(this.playedTime); + this.clearTime(); this.element.classList.remove('dplayer-playing'); this.trigger('pause'); } diff --git a/src/DPlayer.scss b/src/DPlayer.scss index 0f8954f..f544f77 100644 --- a/src/DPlayer.scss +++ b/src/DPlayer.scss @@ -9,16 +9,20 @@ height: 100%; background: #000; - .dplayer-danmaku-top, - .dplayer-danmaku-bottom { - &.dplayer-danmaku-move { - animation: danmaku-center 8s linear !important; + .dplayer-danmaku { + .dplayer-danmaku-top, + .dplayer-danmaku-bottom { + &.dplayer-danmaku-move { + animation: danmaku-center 6s linear; + animation-play-state: paused; + } } - } - .dplayer-danmaku-right { - &.dplayer-danmaku-move { - animation: danmaku 8s linear !important;; + .dplayer-danmaku-right { + &.dplayer-danmaku-move { + animation: danmaku 8s linear; + animation-play-state: paused; + } } } } @@ -161,7 +165,7 @@ &.dplayer-danmaku-move { will-change: visibility; - animation: danmaku-center 5s linear; + animation: danmaku-center 4s linear; animation-play-state: paused; } } @@ -391,13 +395,6 @@ } } - .dplayer-svg-shadow { - stroke: #000; - stroke-opacity: .1; - stroke-width: 2px; - fill: none; - } - .dplayer-fill { fill: #fff; } @@ -615,10 +612,6 @@ transition: all .2s ease-in-out; fill: #ddd; } - - .dplayer-svg-shadow { - stroke: none; - } } .dplayer-comment-setting-box { @@ -739,10 +732,6 @@ transition: all .2s ease-in-out; fill: #ddd; } - - .dplayer-svg-shadow { - stroke: none; - } } } } @@ -828,7 +817,7 @@ width: 150px; border-radius: 2px; background: rgba(28, 28, 28, 0.9); - padding: 7px 0; + padding: 5px 0; overflow: hidden; z-index: 3; display: none;