mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
1 line
7.9 KiB
JavaScript
1 line
7.9 KiB
JavaScript
(()=>(i,t)=>{const e=i=>{let t=0,e=0;for(;i&&!isNaN(i.offsetLeft)&&!isNaN(i.offsetTop);)t+=i.offsetLeft-i.scrollLeft,e+=i.offsetTop-i.scrollTop,i=i.offsetParent;return{x:t,y:e}},o=(i,t=1)=>{const e=i.toString(),o=e.indexOf(".");return-1!==o?e.length-o>t+1?e.substring(0,o+t+1):e:e+".0"},s=i=>{i=Math.abs(i);const t=Math.floor(i/3600),e=Math.floor((i-3600*t)/60);let s=o(i-3600*t-60*e)+"秒";return e>0&&(s=e+"分"+s),t>0&&(s=t+"小时"+s),s},n=i=>{i=Math.abs(i);const t=Math.floor(i/3600),e=Math.floor((i-3600*t)/60),s=i-3600*t-60*e;let n=(s<10?"0":"")+o(s);return n=(e<10?"0":"")+e+":"+n,n=(t<10?"0":"")+t+":"+n};class l{constructor(i){this.lowSpeedForward=null,this.lowSpeedBackward=null,this.mediumSpeedForward=null,this.mediumSpeedBackward=null,this.highSpeedForward=null,this.highSpeedBackward=null,this.lowVolumeUp=null,this.lowVolumeDown=null,this.mediumVolumeUp=null,this.mediumVolumeDown=null,this.highVolumeUp=null,this.highVolumeDown=null,this.speedCancel=null,this.volumeCancel=null,this.minSwipeDistance=20,this.onActionStart=null,this.onActionEnd=null,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,e){if(this._touchStart&&(this.onActionStart&&this.onActionStart(),this._startPosition=e,this._touchStart=!1),"vertical"===i)if(Math.abs(t)<this.minSwipeDistance)this.volumeCancel&&this.volumeCancel(),this._lastAction=null;else{let i=0,o=void 0,s=void 0;if(this._startPosition.x<1/3?(i=.4,o=this.lowVolumeUp,s=this.lowVolumeDown):this._startPosition.x>=1/3&&this._startPosition.x<=2/3?(i=1,o=this.mediumVolumeUp,s=this.mediumVolumeDown):(i=2,o=this.highVolumeUp,s=this.highVolumeDown),t>0){const s=Math.round(100*i*(t-this.minSwipeDistance)/(1.5*e.height));o&&o(s),this._lastAction={type:"volume",volume:s}}else{const o=Math.round(100*i*(t+this.minSwipeDistance)/(1.5*e.height));s&&s(o),this._lastAction={type:"volume",volume:o}}}else if("horizontal"===i)if(e.y<1/3&&(e.x<.1||e.x>.9)||Math.abs(t)<this.minSwipeDistance)this.speedCancel&&this.speedCancel(),this._lastAction=null;else{let i=0,e=void 0,o=void 0;if(this._startPosition.y<1/3?(i=.05,e=this.lowSpeedForward,o=this.lowSpeedBackward):this._startPosition.y>=1/3&&this._startPosition.y<=2/3?(i=.2,e=this.mediumSpeedForward,o=this.mediumSpeedBackward):(i=1,e=this.highSpeedForward,o=this.highSpeedBackward),t>0){const o=(t-this.minSwipeDistance)*i;e&&e(o),this._lastAction={type:"playback",seconds:o}}else{const e=(t+this.minSwipeDistance)*i;o&&o(e),this._lastAction={type:"playback",seconds:e}}}}}if(SpinQuery.any(()=>$(".bilibili-player-video-web-fullscreen"),i=>{if(!i.hasClass("bilibili-player-video-btn")&&$(".bilibili-player-video-btn-fullscreen").data("events")){const t=((i,t)=>i.data("events")[t][0].handler)($(".bilibili-player-video-btn-fullscreen"),"click");i.detach().insertAfter(".bilibili-player-video-btn-widescreen").addClass("bilibili-player-video-btn").on("click",t)}}),SpinQuery.any(()=>$(".bilibili-player-iconfont,.bilibili-player-video-quality-menu"),i=>i.unbind("click")),SpinQuery.count(()=>$(".bilibili-player-video,video"),2,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 class='touch-progress'></div>\n </div>\n </div>");const t=$("video"),a=t.prop("duration"),c=new class{constructor(i){this.action=new l(i),this.onTouchStart=null,this.onTouchEnd=null,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,c=this._yDown-s;if(this._direction)"vertical"===this._direction?this.action.startAction(this._direction,c,l):"horizontal"===this._direction&&this.action.startAction(this._direction,-a,l),t.preventDefault();else{let i="";i=Math.abs(a)>Math.abs(c)?"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)})}}(i.get(0)),h=document.getElementsByClassName("touch-video-info")[0],r=document.getElementsByClassName("touch-video-box")[0];let d=Math.round(100*t.prop("volume"));const u=i=>{(i/=100)<0?i=0:i>1&&(i=1),t.prop("volume",i),$(".bilibili-player-video-volume-num").text(Math.round(100*i)),$(".bui-thumb").css("transform",`translateY(-${48*i}px)`),$(".bui-track-vertical .bui-bar").css("transform",`scaleY(${i})`),0===i?($(".bilibili-player-video-btn-volume").addClass(".video-state-volume-min"),$(".bilibili-player-video-btn-volume").removeClass(".video-state-volume-max"),t.prop("muted",!0)):1===i?($(".bilibili-player-video-btn-volume").removeClass(".video-state-volume-min"),$(".bilibili-player-video-btn-volume").addClass(".video-state-volume-max"),t.prop("muted",!1)):($(".bilibili-player-video-btn-volume").removeClass(".video-state-volume-min"),$(".bilibili-player-video-btn-volume").removeClass(".video-state-volume-max"),t.prop("muted",!1)),$(".bpui-slider-progress").css("height",100*i+"%"),$(".bpui-slider-handle").css("bottom",(35+230*i)/3+"%"),0===i?($(".icon-24soundoff").show(),$(".icon-24soundlarge").hide(),$(".icon-24soundsmall").hide()):i>=.5?($(".icon-24soundoff").hide(),$(".icon-24soundlarge").show(),$(".icon-24soundsmall").hide()):($(".icon-24soundoff").hide(),$(".icon-24soundlarge").hide(),$(".icon-24soundsmall").show())};c.action.onActionStart=(()=>{r.style.display="flex",h.innerHTML="",d=Math.round(100*t.prop("volume"))});const p=i=>e=>{const l=t.prop("currentTime");let c=`<div class='touch-row'><span class='touch-speed'>${i}速</span><span class='touch-info'>进度: ${e>0?"+":"-"}`;const r="</span></div><div class='touch-row'><div class='videoshot'></div><span class='touch-result'>",d=l+e;let u="0%";d>a?(u="100%",c+=`${s(a-l)}${r}${n(l)} → ${n(a)} (${u})`):d<0?(u="0%",c+=`${s(l)}${r}${n(l)} → ${n(0)} (${u})`):(u=o(100*d/a)+"%",c+=`${s(e)}${r}${n(l)} → ${n(d)} (${u})`),h.innerHTML=c+"</span></div><div class='touch-progress'></div>",$(".touch-progress").css("width",u)};c.action.lowSpeedBackward=p("低"),c.action.lowSpeedForward=p("低"),c.action.mediumSpeedBackward=p("中"),c.action.mediumSpeedForward=p("中"),c.action.highSpeedBackward=p("高"),c.action.highSpeedForward=p("高");const m=i=>t=>{let e=`<div class='touch-row'><span class='touch-speed'>${i}速</span><span class='touch-info'>音量: ${t>0?"+":"-"}`;const o="</span></div><div class='touch-row'><span class='touch-result'>",s=d+t;s>100?(e+=`${100-d}${o}${d} → 100`,u(100),$(".touch-progress").css("width","100%")):s<0?(e+=`${d}${o}${d} → 0`,u(0),$(".touch-progress").css("width","0%")):(e+=`${Math.abs(t)}${o}${d} → ${s}`,u(s),$(".touch-progress").css("width",s+"%")),h.innerHTML=e+"</span></div><div class='touch-progress'></div>"};c.action.lowVolumeUp=m("低"),c.action.lowVolumeDown=m("低"),c.action.mediumVolumeUp=m("中"),c.action.mediumVolumeDown=m("中"),c.action.highVolumeUp=m("高"),c.action.highVolumeDown=m("高"),c.action.speedCancel=(()=>{h.innerHTML="松开手指,取消进退"}),c.action.volumeCancel=(()=>{h.innerHTML="松开手指,取消调整",u(d)}),c.action.onActionEnd=(i=>{if(r.style.display="none",h.innerHTML="",i&&"playback"===i.type){let e=t.prop("currentTime");(e+=i.seconds)<0?e=0:e>a&&(e=a),t.prop("currentTime",e)}})}}),0===$("#bilibili-touch-video-player").length){const i=t.getStyle("touchPlayerStyle","bilibili-touch-video-player");$("body").after(i)}})(); |