1

(ブラウザ間で) ユーザーのブラウザ ウィンドウに基づいて Web サイトを自動ズームする方法はありますか?

固定アスペクト比の Web アプリがあります。中央の機能 (ビデオ) は常に画面に表示されるようになっているため、このようにする必要があります。スクロール可能なコンテンツには、内部 div のあるサイドバーを使用します。基本的な構造を確認するには、以下のコードまたは次のフィドルを表示してください: http://jsfiddle.net/hkdeA/6/

私は現在これを 1 つのサイズで開発しており、すべてのピクセル データをパーセンテージに変換すること、つまりレスポンシブ デザインを最初に考えました。ブラウザ ウィンドウに基づいて (100% の高さまたは 100% の幅に収まるように) 含まれている div も再計算します。ただし、ほとんどのレスポンシブ デザインとは異なり、ページのすべての要素を均等にスケーリングする必要があります。私にとって、これはまたとないチャンスです。ほとんどのレスポンシブ デザインでは、一部の要素を拡大または縮小したいだけなので、ブラウザーのズームを使用してジョブを実行することはできません。私にとって、すべてが一斉に進むべきです。CSS のすべての行を調べてピクセル値をパーセンテージに変換するのは時間のかかる頭痛の種であり、可能であればブラウザーのズームを利用できることを望んでいました。

ただし、ブラウザーのズーム機能にアクセスし、ブラウザー ウィンドウに合わせて正確な距離をズームする方法はありますか (ブラウザー ウィンドウのアスペクト比に応じて、高さまたは幅のいずれか)。2つのステップが必要になると思います。

  1. ユーザーなしで実際にズーム機能にアクセスできること。

  2. 必要なズームを計算できること (私のデザインは固定幅であるため、ブラウザー ウィンドウのサイズを計算し、私のデザインと計算された必要なズーム % を比較することができるため、十分に簡単に思えます)、それをユーザーのブラウザーにプッシュします (私のサイトのみ)。 !)

しかし、それは可能ですか?最初の返信者はノーと言っていました。現在、これを実行できるスクリプトはありませんが、他の誰かが何らかの洞察を持っているかどうかを確認したいと思っていました. すべての助けに感謝します。ありがとう!

    <div id="container">
    <div id="vid">

    </div>
    <div id="sidebar">

    </div>
    <div id="footer">

    </div>    
</div>

#container{
    background:grey;
    width:480px;
    height:270px;
    float:left;
}

#vid{
    background:black;
    width:320px;
    height:180px;
    float:left;
}

#sidebar{
    background:blue;
    width:160px;
    height:180px;
    float:right;
}

#foot{
    background:yellow;
    width:480px;
    height:90px;
    float:left;
}
4

3 に答える 3

1

ウィンドウのサイズとビデオの縦横比に基づいて、要素のサイズを変更できます

var videoAspect= 600/400;/* normalWidth/normalHeight*/

var $window = $(window), windowW= $window.width(), windowH= $window.height();
var windowAspect= windowW/windowH;
var sizes={ }
if( windowAspect > videoAspect){
   /* wider so set height 100% and adjust width*/
    sizes.height=windowH;
    sizes.width = windowH * videoAspect;
}else{
    sizes.width=windowW;
    sizes.height = windowW / videoAspect; 
}

$('#container').css( sizes);

デモ: http://jsfiddle.net/hkdeA/

于 2013-01-30T02:54:02.943 に答える
0

たぶん、このスクリプトはあなたのためです。スクリプトは、必要に応じてスクロールバーのサイズも計算します。ラッパーIDを持つブロック(、、など)が必要にdivなりspanます。

これはクロスブラウザスクリプトであり、最新のすべてのブラウザをサポートしています。

気に入ってくれるといいな。お気軽にご利用ください!

// DONT FORGET TO ADD THIS TO YOUR WRAPPER'S CSS BLOCK
// THIS WILL KEEP YOUR SITE CENTERED
// IF YOU USE margin-left:auto; margin-right:auto;

// transform-origin: 50% 0%;
// -ms-transform-origin: 50% 0%;
// -moz-transform-origin: 50% 0%;
// -webkit-transform-origin: 50% 0%;
// -o-transform-origin: 50% 0%;

function FitToScreen(FitType)
{
    var Wrapper = document.getElementById('wrapper');

    var ScreenWidth = window.innerWidth;
    var ScreenHeight = window.innerHeight;

    var WrapperWidth = Wrapper.offsetWidth;
    var WrapperHeight = Wrapper.offsetHeight + 200;

    var WidthRatio = parseFloat(ScreenWidth/WrapperWidth);
    var HeightRatio = parseFloat(ScreenHeight/WrapperHeight);

    var ScaleRatio = 1.0;

    if (FitType == 'width')
    {
        ScaleRatio = WidthRatio;
        if(ScaleRatio * WrapperHeight > ScreenHeight)
        {
            ScaleRatio = parseFloat(ScreenWidth/(WrapperWidth + GetScrollBarWidth () -1));
        }
    }
    else if (FitType == 'height')
    {
        ScaleRatio = HeightRatio;
        if(ScaleRatio * WrapperWidth > ScreenWidth)
        {
            ScaleRatio = parseFloat(ScreenHeight/(WrapperHeight + GetScrollBarWidth () -1));
        }
    }

    var ScaleText = 'scale(' + ScaleRatio.toString().replace(',','.') + ')';

    //Chrome and Safari
        Wrapper.style.webkitTransform = ScaleText;
    //Firefox
        Wrapper.style.MozTransform = ScaleText;
    //Internet Explorer
        Wrapper.style.msTransform = ScaleText;
    //Opera
        Wrapper.style.OTransform = ScaleText;
    //Standard
        Wrapper.style.transform = ScaleText;
}

function GetScrollBarWidth ()
{
    var inner = document.createElement('p');
    inner.style.width = '100%';
    inner.style.height = '200px';

    var outer = document.createElement('div');
    outer.style.position = 'absolute';
    outer.style.top = '0px';
    outer.style.left = '0px';
    outer.style.visibility = 'hidden';
    outer.style.width = '200px';
    outer.style.height = '150px';
    outer.style.overflow = 'hidden';
    outer.appendChild (inner);

    document.body.appendChild (outer);
    var w1 = inner.offsetWidth;
    outer.style.overflow = 'scroll';
    var w2 = inner.offsetWidth;
    if (w1 == w2) w2 = outer.clientWidth;

    document.body.removeChild (outer);
    return (w1 - w2);
}
于 2013-03-12T17:45:36.697 に答える
0

ビューポートを使用してズームを制御できます。これで試してください

于 2013-12-05T02:11:32.767 に答える