2017-02-22 2 views
1

У меня есть элемент видео, положение которого определяется шириной и высотой браузера. Он завернут в функцию resize() ниже. В основном, когда я изменяю размер браузера, позиция изменяется так, что браузер фокусируется на центре видео.стрельба при загрузке и изменении размера вместе?

Я пытаюсь запустить эту функцию сразу после загрузки страницы и изменения размера браузера. Как при загрузке, так и при изменении размера работает, когда я запускаю свою страницу локально, но при нажатии вживую функция не запускается при загрузке, но срабатывает только при изменении размера.

Это также очень противоречиво. Иногда функция срабатывает при загрузке, а иногда и нет.

var resize = function(){ 
    var videoWidth = (window.innerWidth - video.offsetWidth)/2; 
    var videoHeight = (window.innerHeight - video.offsetHeight)/2; 
    video.style.transform = "translateY(" + videoHeight + "px)"; 
    video.style.transform = "translateX(" + videoWidth + "px)"; 
} 

window.addEventListener("load", function(){ 
    resize(); 
}); 

window.addEventListener("resize", function(){ 
    resize(); 
}); 
+1

Просто чтобы проверить, является ли функция не вызываемой или событие не уволено? –

+0

эй там! это скриншот моей проблемы. Я считаю, что это событие не запускается imgur.com/a/myUC8. Первое изображение показывает, как отображается страница, когда функция не срабатывает при загрузке. Но если я изменю размер браузера, он будет перенастраиваться, чтобы выглядеть как второе изображение. Однако иногда функция срабатывает при загрузке - она ​​просто противоречива ... – giantqtipz

+1

Я не знаю, насколько велик остальная часть вашего кода, но мне кажется, что иногда прослушиватель событий нагрузки добавляется после загрузки страницы , поэтому он не будет срабатывать, это также приведет к случайности, потому что иногда он загружается достаточно быстро, чтобы добавить прослушиватель событий до того, как страница закончит загрузку. Является ли код в отдельном JS-файле? Я бы рекомендовал добавить это как можно дальше и дать понять. –

ответ

1

Предлагаю вам два разных способа достижения этого без javascript.

1. Первое решение (без тени на краю)

HTML

<div id="videoWrapper"> 
    <video ... ></video> 
</div> 

CSS

#videoWrapper { 
    position: relative; 
    width: 100%; 
} 

#videoWrapper video { 
    position: absolute; 
    left: 50%; 
    transfrom: translateX(-50%); 
} 

Ваше видео может изменить его высоту или ширину, он будет всегда центрирован в вашей обертке! : D

1. Второе решение (с тенью на краю)

HTML

<div id="videoWrapper"> 
    <div class="shadowBlock"> 
    </div> 
    <div id="video"> 
    </div> 
    <div class="shadowBlock"> 
    </div> 
</div> 

CSS

#videoWrapper { 
    display: flex; 
    flex-direction: row 
} 

.shadowBlock { 
    z-index: 5; 
    display: flex; 
    background-color: black; 
    flex: 1; 
    -webkit-box-shadow: 0px 0px 100px 24px rgba(0,0,0,0.75); 
    -moz-box-shadow: 0px 0px 100px 24px rgba(0,0,0,0.75); 
    box-shadow: 0px 0px 100px 24px rgba(0,0,0,0.75); 
} 

#video { 
    z-index: 4; 
    display: flex; 
} 

Здесь вы можете увидеть, что это хорошо работает: https://jsfiddle.net/et2xrsj5/

+0

Я пытаюсь воспроизвести тот же эффект, что и batmanvsuperman.com (проверьте видео и занавески, и вы увидите, что свойства меняются при изменении размера браузера). у меня есть «искусственные» занавески на сторонах видео, используя пустые divs, которые должны следить за краями видео при изменении размера браузера. Я имею в виду, что это практический проект, поэтому я готов сделать более сложные способы ради обучения :) – giantqtipz

+1

Простейшие способы - это, как правило, лучшие способы! : D Хороший программист держит вещи простыми. Я посмотрел на вашу ссылку, и я не понимаю, что мешает вам использовать мою технику. Можете ли вы предоставить скриншот или схему? – Kornflexx

+0

haha ​​спасибо: D вот несколько скриншотов http://imgur.com/a/myUC8. первое изображение - это то, как оно появляется, когда функция не работает так, как должна. второе изображение - как оно должно работать. все в центре, с тонкими занавесками по краям видео. он будет следовать за видео по мере изменения размера браузера. реквизит, если вы можете догадаться, где находится видео! – giantqtipz

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