Greasy Fork is available in English.

Yandex视频横屏插件

移动端Yandex浏览器看视频全屏时强制为横屏观看(安卓已经过测试运行,ios并未测试)

2019/02/09時点のページです。最新版はこちら。

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name           Yandex视频横屏插件
// @name:en        Yandex Video Player Horizontal Screen Plug-in
// @description    移动端Yandex浏览器看视频全屏时强制为横屏观看(安卓已经过测试运行,ios并未测试)
// @description:en Yandex browser is set to play horizontally when viewing full-screen video. This is for Android, and IOS is not tested.
// @version        1.2.4
// @author         L.Xavier
// @namespace      https://greasyfork.org/zh-CN/users/128493
// @match          *://*/*
// @grant          none
// @run-at         document-end
// @note           功能说明:1.全屏下强制为横屏观看,支持重力感应切换方向(需要设备支持)。2.添加双击全屏功能。一些网站全屏按钮无法使视频进入全屏模式(例如m.bilibili.com),新增在视频播放状态下,双击全屏(支持双击退出全屏)。该功能需要关闭yandex浏览器的"忽略网站的禁止字体缩放请求"功能,不关闭双击会缩放网页。3.竖屏模式。有些视频更适宜在竖屏状态下观看,新增摇一摇切换竖屏,再次摇一摇换回横屏(需要设备支持)。
// ==/UserScript==
(function() {
    'use strict';
    var oriHway="landscape-primary",oriHgamma=0,oriHbeta=0,isLock=true;

    function orientationHandler(event) {
        oriHgamma=Math.round(event.gamma);
        oriHbeta=Math.abs(Math.round(event.beta));
        if((oriHbeta<45 && Math.abs(oriHgamma)>25) || (oriHbeta>135 && Math.abs(oriHgamma)>25)){
            oriHway=((oriHgamma>25 && oriHbeta<45) || (oriHgamma<-25 && oriHbeta>135)) ? "landscape-secondary" : "landscape-primary";
        }
       if(isLock){screen.orientation.lock(oriHway);}
    }

    var SHAKE_THRESHOLD = 18000;//摇一摇灵敏度,越小越灵敏
    var last_update = 0,diffTime=0,speed=0;
    var x=0, y=0, z=0, last_x = 0, last_y = 0, last_z = 0;
    var acceleration=null,curTime=null,cdTimer=null,isReady=true;
    function readyOK(){isReady=true;}

    function deviceMotionHandler(eventData) {
        if(document.webkitFullscreenElement && isReady){
            acceleration =eventData.accelerationIncludingGravity;
            curTime = new Date().getTime();
            if ((curTime-last_update)> 10) {
                diffTime = curTime -last_update;
                last_update = curTime;
                x = acceleration.x;
                y = acceleration.y;
                z = acceleration.z;
                speed = Math.abs(x +y + z - last_x - last_y - last_z) / diffTime * 10000;
                if (speed > SHAKE_THRESHOLD) {
                    clearTimeout(cdTimer);
                    if(isLock){
                        isLock=false;
                        screen.orientation.lock("portrait-primary");
                    }
                    else{
                        isLock=true;
                        screen.orientation.lock(oriHway);
                    }
                    isReady=false;
                    cdTimer=setTimeout(readyOK,1000);
                }
                last_x = x;
                last_y = y;
                last_z = z;
            }
        }
    }

    var videoEle=document.getElementsByTagName("video");
    var videoplay=null,vNum=0,vNo=0,vi=0;
    function setVideo(e){videoplay=this;}

    function dblfull(){
        if(videoplay!=null){
            if(document.webkitFullscreenElement){videoplay.webkitExitFullscreen();}
            else{videoplay.webkitRequestFullScreen();}
        }
    }

    function getVideoPlay() {
        if(videoEle.length>vNum){
            for(vi=0;vi<videoEle.length;vi++){
                videoEle[vi].addEventListener("play",setVideo,false);
            }
            if(vNum==0){
                if (window.DeviceOrientationEvent) {window.addEventListener("deviceorientation", orientationHandler, false);}
                else{screen.orientation.lock(oriHway);}
                document.body.addEventListener("dblclick",dblfull,false);
                if (window.DeviceMotionEvent) {window.addEventListener('devicemotion',deviceMotionHandler,false);}
            }
            vNum=videoEle.length;
        }else{
            if(vNo<3){vNo++;}
            else{clearInterval(getTimer);}
        }
    }

    var getTimer=setInterval(getVideoPlay,500);
    function clickGet(){
        clearInterval(getTimer);
        vNo=0;
        getTimer=setInterval(getVideoPlay,500);
    }
    document.body.addEventListener("click",clickGet,false);

})();