2017-02-14 18 views
0

Прямо сейчас, я пытаюсь создать «snapchat» вид веб-приложения для моего обучения. Приложение использует теги HTML5, такие как видео и холст.HTML-тег для заполнения всего экрана на телефонах

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

Я пробовал все: от ширины: 100%; height: 100% ;, height: 100vh, jquery, но это испортило функцию getUserMedia, поэтому она даже не работала.

Прямо сейчас, это мой код: HTML файл:

<!doctype html> 
<html lang="da"> 
    <head> 
     <title>Camera output</title> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <link href="css/style.css" type="text/css" rel="stylesheet"> 
     <script src="jquery-3.1.1.min.js"></script> 
    </head> 
    <body> 
     <video id="video" autoplay></video> 
     <button id="snap" class="snapButton">Snap Photo</button> 
     <canvas id="canvas" width="640" height="480"></canvas> 

     <script src="js/script.js" type="text/javascript"></script> 
    </body> 
</html> 

CSS Файл:

* { 
    margin: 0; 
    padding: 0; 
} 

#video { 
    -webkit-transition: all 1s ease; 
    -moz-transition: all 1s ease; 
    -o-transition: all 1s ease; 
    transition: all 1s ease; 
    transform-origin: center center; 
} 

JS файл:

function setElementFullScreen(selector) { 
    var ele= $(selector); 
    // Set left/top, can be done in directly in css 
    ele.css('top',0).css('left',0); 
    // Set size from window 
    ele.height($(window).height()).width($(window).width()); 
} 

$(document).ready(function() { 
    setElementFullScreen('video'); 
}); 

// Add resize event 
$(window).on('resize', function() { 
    setElementFullScreen('video'); 
}); 

// Put event listeners into place 
window.addEventListener("DOMContentLoaded", function() { 
    // Grab elements, create settings, etc. 
    var canvas = document.getElementById('canvas'); 
    var context = canvas.getContext('2d'); 
    var video = document.getElementById('video'); 
    var mediaConfig = { video: true }; 
    var errBack = function(e) { 
     console.log('An error has occurred!', e) 
    }; 

    // Put video listeners into place 
    if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { 
     navigator.mediaDevices.getUserMedia(mediaConfig).then(function(stream) { 
      video.src = window.URL.createObjectURL(stream); 
      video.play(); 
     }); 
    } 

    /* Legacy code below! */ 
    else if(navigator.getUserMedia) { // Standard 
     navigator.getUserMedia(mediaConfig, function(stream) { 
      video.src = stream; 
      video.play(); 
     }, errBack); 
    } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed 
     navigator.webkitGetUserMedia(mediaConfig, function(stream){ 
      video.src = window.webkitURL.createObjectURL(stream); 
      video.play(); 
     }, errBack); 
    } else if(navigator.mozGetUserMedia) { // Mozilla-prefixed 
     navigator.mozGetUserMedia(mediaConfig, function(stream){ 
      video.src = window.URL.createObjectURL(stream); 
      video.play(); 
     }, errBack); 
    } 

    // Trigger photo take 
    document.getElementById('snap').addEventListener('click', function() { 
     context.drawImage(video, 0, 0, 640, 480); 
    }); 
}, false); 

Так что мой вопрос: Есть ли любой способ сделать тег видео заполнить каждый бит экрана телефона? Я пробовал на рабочем столе, у него не было проблем с заполнением по горизонтали.

Заранее спасибо.

ответ

0

Попробуйте это,

<video id="video" autoplay></video> 

<script> 
    var elem = document.getElementById("myvideo"); 
    if(elem.requestFullscreen) { 
     elem.requestFullscreen(); 
    } 
</script> 

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

Ссылка: https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API

Edit:

Кажется, ваш ele.height($(window).height()).width($(window).width()); давая вам неприятности. Попробуйте выполнить регистрацию window.height() и window.width() на консоль отладки, чтобы определить, что она возвращает.

Если вы еще не сделали, посмотрите на это:

https://www.w3schools.com/tags/canvas_drawimage.asp

Вот учебник примеров подобных приложений:

https://www.html5rocks.com/en/tutorials/getusermedia/intro/

+0

Я думаю, вы поняли. Я не хочу, чтобы он шел в полноэкранном режиме, потому что у меня будут кнопки поверх элемента. Я хочу, чтобы он заполнил весь фон/экран телефона. – Ismail

+0

Это совсем не то, что я понял, ваш вопрос был. Можете ли вы опубликовать еще несколько своих кодов? Особенно интересует ваш 'CSS' и обертка для видео и наложения кнопок. – bowl0stu

+0

Извините, если мой вопрос был не таким ясным. Я обновил свой вопрос с помощью моего html, css и js-файла. – Ismail

0

Здесь у вас есть snipplet с рабочим примером ,

function setElementFullScreen(selector) { 
 
    var ele = $(selector); 
 
    // Get window size 
 
    var maxWidth = $(window).width(); 
 
    var maxHeight = $(window).height(); 
 
    // Get video size 
 
    var videoWidth = ele.width(); 
 
    var videoHeight = ele.height(); 
 
    // Calcul relative size 
 
    if (maxWidth > maxHeight) { 
 
     var relatifWidth = videoWidth/(videoHeight/maxHeight); 
 
     var relatifHeight = maxHeight; 
 
    } else { 
 
     var relatifWidth = maxWidth; 
 
     var relatifHeight = videoHeight/(videoWidth/maxWidth); 
 
    } 
 
    // Check if result size is not bigger than canvas size 
 
    if (relatifWidth > maxWidth) { 
 
     relatifWidth = maxWidth; 
 
     relatifHeight = (relatifWidth * videoHeight)/videoWidth; 
 
    } else if (relatifHeight > maxHeight) { 
 
     relatifHeight = maxHeight; 
 
     relatifWidth = (relatifHeight * videoWidth)/videoHeight; 
 
    } 
 
    // Set size from window 
 
    ele.height(relatifHeight).width(relatifWidth); 
 
} 
 

 
$(document).ready(function() { 
 
    setElementFullScreen('#video'); 
 

 
    // Put event listeners into place 
 
    window.addEventListener("DOMContentLoaded", function() { 
 
     // Grab elements, create settings, etc. 
 
     var canvas = document.getElementById('canvas'); 
 
     var context = canvas.getContext('2d'); 
 
     var video = document.getElementById('video'); 
 
     var mediaConfig = {video: true}; 
 
     var errBack = function (e) { 
 
      console.log('An error has occurred!', e) 
 
     }; 
 

 
     // Put video listeners into place 
 
     if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { 
 
      navigator.mediaDevices.getUserMedia(mediaConfig).then(function (stream) { 
 
       video.src = window.URL.createObjectURL(stream); 
 
       video.play(); 
 
      }); 
 
     } 
 

 
     /* Legacy code below! */ 
 
     else if (navigator.getUserMedia) { // Standard 
 
      navigator.getUserMedia(mediaConfig, function (stream) { 
 
       video.src = stream; 
 
       video.play(); 
 
      }, errBack); 
 
     } else if (navigator.webkitGetUserMedia) { // WebKit-prefixed 
 
      navigator.webkitGetUserMedia(mediaConfig, function (stream) { 
 
       video.src = window.webkitURL.createObjectURL(stream); 
 
       video.play(); 
 
      }, errBack); 
 
     } else if (navigator.mozGetUserMedia) { // Mozilla-prefixed 
 
      navigator.mozGetUserMedia(mediaConfig, function (stream) { 
 
       video.src = window.URL.createObjectURL(stream); 
 
       video.play(); 
 
      }, errBack); 
 
     } 
 

 
     // Trigger photo take 
 
     document.getElementById('snap').addEventListener('click', function() { 
 
      context.drawImage(video, 0, 0, 640, 480); 
 
     }); 
 
    }, false); 
 

 
}); 
 

 
// Add resize event 
 
$(window).on('resize', function() { 
 
    setElementFullScreen('video'); 
 
});
video { 
 
     margin: 0; 
 
     padding: 0; 
 
     top: 0; 
 
     left: 0; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<video id="video" autoplay> 
 
    <source src="http://techslides.com/demos/sample-videos/small.mp4" type="video/mp4"> 
 
</video> 
 
<br> 
 
<button id="snap" class="snapButton">Snap Photo</button> 
 
<br> 
 
<canvas id="canvas" width="640" height="480"></canvas>

+0

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

+0

Я пробую кое-что, скажите, если это вам поможет. – Camille

 Смежные вопросы

  • Нет связанных вопросов^_^