Bilibili-Evolved/touch/touch-player.min.js
2018-07-24 19:50:11 +08:00

1 line
7.0 KiB
JavaScript

(()=>(i,t)=>{const o=(i,t)=>i.data("events")[t][0].handler,e=i=>{let t=0,o=0;for(;i&&!isNaN(i.offsetLeft)&&!isNaN(i.offsetTop);)t+=i.offsetLeft-i.scrollLeft,o+=i.offsetTop-i.scrollTop,i=i.offsetParent;return{x:t,y:o}};class s{constructor(i){this.action=new n(i),this.onTouchStart=void 0,this.onTouchEnd=void 0,this._direction=null,i.addEventListener("touchstart",i=>{this._xDown=i.touches[0].clientX,this._yDown=i.touches[0].clientY,this.onTouchStart&&this.onTouchStart(i)}),i.addEventListener("touchmove",t=>{if(!this._xDown||!this._yDown)return;const o=t.touches[0].clientX,s=t.touches[0].clientY,n=e(i),l={x:(t.touches[0].pageX-n.x)/i.clientWidth,y:(t.touches[0].pageY-n.y)/i.clientHeight,width:i.clientWidth,height:i.clientHeight},a=this._xDown-o,h=this._yDown-s;if(this._direction)"vertical"===this._direction?this.action.startAction(this._direction,h,l):"horizontal"===this._direction&&this.action.startAction(this._direction,-a,l),t.preventDefault();else{let i="";i=Math.abs(a)>Math.abs(h)?"horizontal":"vertical",this._direction=i,t.preventDefault()}}),i.addEventListener("touchend",i=>{this._xDown=null,this._yDown=null,this._direction=null,this.onTouchEnd&&this.onTouchEnd(i)})}}class n{constructor(i){this.lowSpeedForward=void 0,this.lowSpeedBackward=void 0,this.mediumSpeedForward=void 0,this.mediumSpeedBackward=void 0,this.highSpeedForward=void 0,this.highSpeedBackward=void 0,this.lowVolumeUp=void 0,this.lowVolumeDown=void 0,this.mediumVolumeUp=void 0,this.mediumVolumeDown=void 0,this.highVolumeUp=void 0,this.highVolumeDown=void 0,this.speedCancel=void 0,this.volumeCancel=void 0,this.minSwipeDistance=20,this.onActionStart=void 0,this.onActionEnd=void 0,this._element=i,this._touchStart=!1,this._startPosition=null,this._lastAction=null,i.addEventListener("touchstart",()=>{this._touchStart=!0}),i.addEventListener("touchend",()=>{this._startPosition=null,this.onActionEnd&&this.onActionEnd(this._lastAction),this._lastAction=null})}startAction(i,t,o){if(this._touchStart&&(this.onActionStart&&this.onActionStart(),this._startPosition=o,this._touchStart=!1),"vertical"===i)if(Math.abs(t)<this.minSwipeDistance)this.volumeCancel&&this.volumeCancel(),this._lastAction=null;else{let i=0,e=void 0,s=void 0;if(this._startPosition.x<1/3?(i=.4,e=this.lowVolumeUp,s=this.lowVolumeDown):this._startPosition.x>=1/3&&this._startPosition.x<=2/3?(i=1,e=this.mediumVolumeUp,s=this.mediumVolumeDown):(i=2,e=this.highVolumeUp,s=this.highVolumeDown),t>0){const s=Math.round(100*i*(t-this.minSwipeDistance)/(1.5*o.height));e&&e(s),this._lastAction={type:"volume",volume:s}}else{const e=Math.round(100*i*(t+this.minSwipeDistance)/(1.5*o.height));s&&s(e),this._lastAction={type:"volume",volume:e}}}else if("horizontal"===i)if(o.y<1/3&&(o.x<.1||o.x>.9)||Math.abs(t)<this.minSwipeDistance)this.speedCancel&&this.speedCancel(),this._lastAction=null;else{let i=0,o=void 0,e=void 0;if(this._startPosition.y<1/3?(i=.05,o=this.lowSpeedForward,e=this.lowSpeedBackward):this._startPosition.y>=1/3&&this._startPosition.y<=2/3?(i=.2,o=this.mediumSpeedForward,e=this.mediumSpeedBackward):(i=1,o=this.highSpeedForward,e=this.highSpeedBackward),t>0){const e=(t-this.minSwipeDistance)*i;o&&o(e),this._lastAction={type:"playback",seconds:e}}else{const o=(t+this.minSwipeDistance)*i;e&&e(o),this._lastAction={type:"playback",seconds:o}}}}}if(waitForQuery()(()=>$(".bilibili-player-video-web-fullscreen"),i=>i.length>0,i=>{if(!i.hasClass("bilibili-player-video-btn")&&$(".bilibili-player-video-btn-fullscreen").data("events")){const t=o($(".bilibili-player-video-btn-fullscreen"),"click");i.detach().insertAfter(".bilibili-player-video-btn-widescreen").addClass("bilibili-player-video-btn").on("click",t)}}),waitForQuery()(()=>$(".bilibili-player-iconfont,.bilibili-player-video-quality-menu"),i=>i.length>0,i=>i.unbind("click")),waitForQuery()(()=>$(".bilibili-player-video"),i=>i.length>0&&$("video").length>0,i=>{if(0===$(".touch-video-box").length){$(".bilibili-player-video-subtitle").before("<div class='touch-video-box-wrapper'>\n <div class='touch-video-box'>\n <div class='touch-video-info'></div>\n </div>\n </div>");const t=new s(i.get(0)),o=document.getElementsByClassName("touch-video-info")[0],e=document.getElementsByClassName("touch-video-box")[0];t.action.speedCancel=(()=>{o.innerHTML="松开手指,取消进退"}),t.action.volumeCancel=(()=>{o.innerHTML="松开手指,取消调整"}),t.action.onActionStart=(()=>{e.style.display="flex",o.innerHTML=""});const n=(i,t=1)=>{const o=i.toString(),e=o.indexOf(".");return-1!==e?o.length-e>t+1?o.substring(0,e+t+1):o:o+".0"},l=i=>{i=Math.abs(i);const t=Math.floor(i/3600),o=Math.floor((i-3600*t)/60),e=i-3600*t-60*o;let s=n(e)+"秒";return o>0&&(s=o+"分"+s),t>0&&(s=t+"小时"+s),s},a=i=>{i=Math.abs(i);const t=Math.floor(i/3600),o=Math.floor((i-3600*t)/60),e=i-3600*t-60*o;let s=(e<10?"0":"")+n(e);return s=(o<10?"0":"")+o+":"+s,s=(t<10?"0":"")+t+":"+s},h=$("video"),c=h.prop("duration"),d=i=>t=>{const e=h.prop("currentTime");let s=`<div class='touch-row'><span class='touch-speed'>${i}速</span><span class='touch-info'>进度: ${t>0?"+":"-"}`;const d="</span></div><div class='touch-row'><div class='videoshot'></div><span class='touch-result'>",r=e+t;s+=r>c?`${l(c-e)}${d}${a(e)}${a(c)} (100%)`:r<0?`${l(e)}${d}${a(e)}${a(0)} (0%)`:`${l(t)}${d}${a(e)}${a(r)} (${n(100*r/c)}%)`,o.innerHTML=s+"</span></div>"};t.action.lowSpeedBackward=d("低"),t.action.lowSpeedForward=d("低"),t.action.mediumSpeedBackward=d("中"),t.action.mediumSpeedForward=d("中"),t.action.highSpeedBackward=d("高"),t.action.highSpeedForward=d("高");const r=i=>t=>{const e=Math.round(100*h.prop("volume"));let s=`<div class='touch-row'><span class='touch-speed'>${i}速</span><span class='touch-info'>音量: ${t>0?"+":"-"}`;const n="</span></div><div class='touch-row'><span class='touch-result'>",l=e+t;s+=l>100?`${100-e}${n}${e} → 100`:l<0?`${e}${n}${e} → 0`:`${Math.abs(t)}${n}${e}${l}`,o.innerHTML=s+"</span></div>"};t.action.lowVolumeUp=r("低"),t.action.lowVolumeDown=r("低"),t.action.mediumVolumeUp=r("中"),t.action.mediumVolumeDown=r("中"),t.action.highVolumeUp=r("高"),t.action.highVolumeDown=r("高"),t.action.onActionEnd=(i=>{if(e.style.display="none",o.innerHTML="",i)if("volume"===i.type){let t=h.prop("volume");(t+=i.volume/100)<0?t=0:t>1&&(t=1),h.prop("volume",t),$(".bilibili-player-video-volume-num").text(Math.round(100*t)),$(".bpui-slider-progress").css("height",100*t+"%"),$(".bpui-slider-handle").css("bottom",(35+230*t)/3+"%"),0===t?($(".icon-24soundoff").show(),$(".icon-24soundlarge").hide(),$(".icon-24soundsmall").hide()):t>=.5?($(".icon-24soundoff").hide(),$(".icon-24soundlarge").show(),$(".icon-24soundsmall").hide()):($(".icon-24soundoff").hide(),$(".icon-24soundlarge").hide(),$(".icon-24soundsmall").show())}else if("playback"===i.type){let t=h.prop("currentTime");(t+=i.seconds)<0?t=0:t>c&&(t=c),h.prop("currentTime",t)}})}}),0===$("#bilibili-touch-video-player").length){const i=t.getStyle("touchPlayerStyle","bilibili-touch-video-player");$("body").after(i)}})();