Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Определение наличия и размера прокрутки у фрейма (https://javascript.ru/forum/project/16341-opredelenie-nalichiya-i-razmera-prokrutki-u-frejjma.html)

MVH 04.04.2011 18:08

Определение наличия и размера прокрутки у фрейма
 
Что бы использовать без jQuery надо $(frameElement).width() и $(frameElement).height() заменить на frameElement.clientWidth/Height и вычитать или не использовать padding'и для iframe'а в IE7.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script src="jquery.js" type="text/javascript"></script>
    <script type="text/javascript">
    /**
     * Detect frame scrollbar size.
     * Tested on iframe tag in browsers:
     * Firefox 3.6.16
     * Firefox 4
     * Opera 9.64
     * Opera 10.60
     * Opera 11.01
     * Chrome 10
     * IE 6,7,8,9
     * Firefox mac 3.6.13
     * Chrome mac 10
     * Safari mac 5.0.3
     * 
     * @param {HTMLIFrameElement} frameElement
     */
    function detectFrameScrollbarSize(frameElement)
    {
        // frameElement.clientWidth/Height:
        // - include scrollbar size for iframe
        // - include borders only in IE6
        // - include paddings in firefox/opera/chrome/IE6,7
        // - not include paddings in IE8,9

        // frameElement.contentWindow.innerWidth/Height:
        // - include scrollbar size
        // - not include paddings and borders
        // - undefined in IE6,7,8
        
        // jQuery $(frameElement).width()/height():
        // - include scrollbar size for iframe
        // - include borders only in IE6
        // - not include paddings

        var documentElement = frameElement.contentWindow.document.documentElement;
        // Instead of jQuery width()/height() you can use frameElement.clientWidth/Height (and subtract 
        // or not use iframe paddings for IE7):
        var clientWidth = frameElement.contentWindow.innerWidth || $(frameElement).width();
        var clientHeight = frameElement.contentWindow.innerHeight || $(frameElement).height();

        // In IE6 frameElement.clientWidth/Height and jQuery width()/height() include frame border (css border)
        if (document.all && !window.opera && !window.XMLHttpRequest) // IE6
        {
            // documentElement.offsetWidth/Height in IE6 is similar to frameElement.clientWidth in IE8,9
            clientWidth = documentElement.offsetWidth;
            clientHeight = documentElement.offsetHeight;
        }

        return {
            width: documentElement.clientWidth ? clientWidth - documentElement.clientWidth : 0,
            height: documentElement.clientHeight ? clientHeight - documentElement.clientHeight : 0
        };
    }
    </script>
    <script type="text/javascript">
        $(document).ready(function()
        {
            $('iframe').load(function(e)
            {
                var size = detectFrameScrollbarSize(e.currentTarget);
                alert([size.width, size.height]);
            });
        });
    </script>
</head>
<body>
    <iframe src="/" frameborder="0"></iframe>
</body>
</html>

B~Vladi 05.04.2011 17:54

Написал бы тогда уж на чистом JS.

MVH 05.04.2011 19:16

Цитата:

Сообщение от B~Vladi (Сообщение 99395)
Написал бы тогда уж на чистом JS.

Дописали бы уж тогда вместо своего сообщения.

B~Vladi 05.04.2011 21:15

Аха, щас.

MVH 06.04.2011 11:36

Цитата:

Сообщение от B~Vladi (Сообщение 99424)
Аха, щас.

Ханжа.

B~Vladi 06.04.2011 12:05

Цитата:

Сообщение от MVH
Ханжа.

:blink:

MVH 06.04.2011 12:49

Цитата:

Сообщение от B~Vladi (Сообщение 99533)
:blink:

Чему Вы удивляетесь? Я выложил безвозмездно скрипт, который написал с использованием той библиотеки, которую применяю в настоящий момент, описав, тем не менее, способ как переработать скрипт, если кому-то потребуется версия без jQuery. Но Вы, почему то, начали высказывать свои недовольства так, будто я Вам чем-то обязан, вместо того, что бы поступить в духе open source (приверженцем которого, судя по вашей подписи, Вы являетесь) и доработать скрипт самому.


Часовой пояс GMT +3, время: 10:09.