RequestFullscreen в Chrome: изображение остается маленьким

Я следую этому великолепному учебнику из SitePoint, чтобы реализовать полноэкранный просмотр на некоторых изображениях моего сайта.

Мой код очень похож на пример, предоставленный SitePoint, но вот мой код:

HTML

<figure class="fullscreenOnClick">
    <img src="https://dw-uploads.s3.eu-central-1.amazonaws.com/photos/originals/359c0687ae12e32bb5f26f2005763b73">
</figure>

JS

$('.fullscreenOnClick').on('click', function(e) {
    e.preventDefault;

    var elem = this;
    if (elem.requestFullscreen) {
        elem.requestFullscreen();
    } else if (elem.msRequestFullscreen) {
        elem.msRequestFullscreen();
    } else if (elem.mozRequestFullScreen) {
        elem.mozRequestFullScreen();
    } else if (elem.webkitRequestFullscreen) {
        elem.webkitRequestFullscreen();
    } else {
        alert("Sorry, your browser is too old and doesn't support fullscreen :-(")
    }
});

http://jsfiddle.net/xnyj9wr5/ (не работает - снова, см. пример SitePoint)

Проблема

Моя проблема в том, что Firefox и IE отображают полноэкранное изображение, как я ожидаю: изображение отображается в исходном размере с центром.

Chrome вызывает проблему: изображение просто центрируется на черном фоне, сохраняя его текущий размер.

Как я могу заставить Chrome делать полноэкранный режим, например Firefox и IE?

Обратите внимание: я должен применить полноэкранный эффект к внешнему элементу, а не к самому img, потому что в противном случае изображение растягивается.

Ответы

Ответ 1

Элемент фигуры имеет стиль width: 30%. Это вызывает проблему в Chrome.

В соответствии с MDN в разделе "Различия в презентации":

Здесь стоит отметить ключевое различие между Gecko и WebKit в настоящее время: Gecko автоматически добавляет правила CSS для элемент растянуть его, чтобы заполнить экран: "ширина: 100%, высота: 100%". WebKit этого не делает, вместо этого он центрирует полноэкранный режим элемент с одинаковым размером на экране, который в противном случае является черным. Получить такое же полноэкранное поведение в WebKit, вам нужно добавить свой собственный "ширина: 100%, высота: 100%"; CSS правила для элемента:

#myvideo: -webkit-full-screen {width: 100%; высота: 100%; }

С другой стороны, если вы пытаетесь эмулировать поведение WebKit на Гекко, вам нужно разместить элемент, который вы хотите представить внутри другой элемент, который вы будете делать в полноэкранном режиме, и используйте CSS правила для настройки внутреннего элемента в соответствии с желаемым внешним видом.

Мне удалось добавить предлагаемый css с помощью инструментов разработчика Chrome к белой картинке, которую вы связали в комментариях, и она показала правильный размер. Тем не менее, у него действительно была белая коробка (которая, как представляется, исходит от элемента рисунка).

Я бы постарался изменить ваш javascript, поскольку @AdamFischer предлагает сделать изображение в полноэкранном режиме вместо тега рисунка и добавить соответствующий css. Если это не вариант, вы можете применить css к элементу фигуры, а затем при необходимости отрегулировать, чтобы получить нужный вам вид. (Обратите внимание, что это webkit specific css, поэтому он не должен мешать другим браузерам.) У меня также был некоторый успех, обертывающий фигуру в другом элементе (например, span или div) и применяя полноэкранный css к этому и удаляя width:30% от рисунка.

Ответ 2

Для главного div укажите стили

#maindiv:-webkit-full-screen {   min-width: 100%;   min-height: 100%; }

предоставить одинаковые стили для изображения tag.try, изменив свойства min-width и height на ширину и высоту.

Ответ 3

Выбранный элемент после onclick событие - это не изображение, а метка рисунка.

Просто обновите свой код javascript до:

$('img').on('click', function(e) {
    e.preventDefault;

    var elem = this;
    if (elem.requestFullscreen) {
        elem.requestFullscreen();
    } else if (elem.msRequestFullscreen) {
        elem.msRequestFullscreen();
    } else if (elem.mozRequestFullScreen) {
        elem.mozRequestFullScreen();
    } else if (elem.webkitRequestFullscreen) {
        elem.webkitRequestFullscreen();
    } else {
        alert("Sorry, your browser is too old and doesn't support fullscreen :-(")
    }
});

http://fiddle.jshell.net/xnyj9wr5/2.

(Полноэкранный режим не будет работать внутри кадра, так что вот ссылка для результата http://fiddle.jshell.net/xnyj9wr5/2/show/)

Обратите внимание, что requestFullscreen() устарел при ненадежном происхождении, и поддержка будет удалена в будущем. Вы должны рассмотреть возможность переключения приложения на безопасное происхождение, например HTTPS. Подробнее см. https://goo.gl/rStTGz.

https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins

Изменить: На вашем веб-сайте примера http://blogs.sitepointstatic.com/examples/tech/full-screen/index2.html

max-width: 100%;

- проблема. Удалите это правило и измените размер изображения по желанию. При необходимости вы должны попробовать удалить это правило с помощью js после запуска события клика. Или привяжите его к событию requestfullscreen.

Ответ 4

Я думаю, что это связано со стилями пользовательского агента по умолчанию. Вы можете центрировать изображение только тогда, когда вы находитесь в полноэкранном режиме. Попробуйте этот css:

.fullscreenOnClick:-webkit-full-screen img {
    display: block;
    margin: 0 auto;
}