2017-01-12 3 views
0

Я пытаюсь создать несколько шаблонов веб-сайтов, чтобы помочь мне улучшить свои навыки разработки на начальном этапе, поскольку в настоящее время я намного лучше занимаюсь работой на заднем плане.Youtube Video Header Background

Я пытаюсь несколько повторить стиль моего собственного сайта (https://thomas-smyth.co.uk/), который является простым шаблоном Bootstrap. Однако вместо использования статической фотографии в заголовке я хочу заменить ее видео Youtube. Я начал с сокращения шаблона, используемого на моем веб-сайте, и разделил его на все, как я думаю, могу получить его, не нарушая заголовок.

Я нашел несколько фрагментов кода вокруг места, чтобы показать, как установить видео Youtube в качестве фона общей страницы, но не фон для определенных разделов страницы. Как я могу это сделать? Примечание. Он должен быть передан с YouTube, поскольку мои хосты не разрешают мне размещать видео на своих серверах.

Мой текущий код:

<!DOCTYPE html> 
<html> 

<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <!-- Tell the browser to be responsive to screen width --> 
    <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"> 

    <title>Group Name | Home</title> 

    <!-- Bootstrap 3.3.6 --> 
    <link rel="stylesheet" href="dist/bootstrap/css/bootstrap.min.css"> 
    <!-- Font Awesome --> 
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css"> 
    <!-- Ionicons --> 
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css"> 

    <!-- Custom --> 
    <link rel="stylesheet" href="dist/css/mainstyle.css"> 

</head> 

<body> 

    <header> 
     <div class="header-content"> 
      <div class="header-content-inner"> 
       <h1>This is going once vid is done.</h1> 
      </div> 
     </div> 
    </header> 

    <section class="bg-primary"> 
     <div class="container"> 
      <div class="row"> 
       <div class="col-lg-8 col-lg-offset-2 text-center"> 
        <h2 class="section-heading">Placeholder!</h2> 
        <p>I should have found a witty comment to put here, but I'm just gonna put "Placeholder" instead.</p> 
       </div> 
      </div> 
     </div> 
    </section> 



    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
    <script src="dist/bootstrap/js/bootstrap.min.js"></script> 
    <script src="dist/js/mainscript.js"></script> 

</body> 

</html> 

CSS

html, 
body { 
    height: 100%; 
    width: 100%; 
} 
body { 
    font-family: 'Merriweather', 'Helvetica Neue', Arial, sans-serif; 
} 
h1, 
h2, 
h3, 
h4, 
h5, 
h6 { 
    font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif; 
} 
p { 
    font-size: 16px; 
    line-height: 1.5; 
    margin-bottom: 20px; 
} 
.bg-primary { 
    background-color: #F05F40; 
} 
section { 
    padding: 100px 0; 
} 
.no-padding { 
    padding: 0; 
} 

header { 
    position: relative; 
    width: 100%; 
    min-height: auto; 
    background-image: url('../img/header.jpg'); 
    background-position: 0% 80%; 
    -webkit-background-size: cover; 
    -moz-background-size: cover; 
    background-size: cover; 
    -o-background-size: cover; 
    text-align: center; 
    color: white; 
} 
header .header-content { 
    position: relative; 
    text-align: center; 
    padding: 100px 15px 100px; 
    width: 100%; 
} 
header .header-content .header-content-inner h1 { 
    font-weight: 700; 
    text-transform: uppercase; 
    margin-top: 0; 
    margin-bottom: 0; 
    font-size: 30px; 
} 
@media (min-width: 768px) { 
    header { 
    min-height: 100%; 
    } 
    header .header-content { 
    position: absolute; 
    top: 50%; 
    -webkit-transform: translateY(-50%); 
    -ms-transform: translateY(-50%); 
    transform: translateY(-50%); 
    padding: 0 50px; 
    } 
    header .header-content .header-content-inner { 
    max-width: 1000px; 
    margin-left: auto; 
    margin-right: auto; 
    } 
    header .header-content .header-content-inner h1 { 
    font-size: 50px; 
    } 
} 
.section-heading { 
    margin-top: 0; 
} 

::-moz-selection { 
    color: white; 
    text-shadow: none; 
    background: #222222; 
} 
::selection { 
    color: white; 
    text-shadow: none; 
    background: #222222; 
} 
img::selection { 
    color: white; 
    background: transparent; 
} 
img::-moz-selection { 
    color: white; 
    background: transparent; 
} 
body { 
    webkit-tap-highlight-color: #222222; 
} 

Лучшее, что я до сих пор (делает фон целой страницы)

<div class="video-background"> 
    <div class="video-foreground"> 
     <iframe src="https://www.youtube.com/embed/W0LHTWG-UmQ?controls=0&showinfo=0&rel=0&autoplay=1&loop=1&playlist=W0LHTWG-UmQ" frameborder="0" allowfullscreen></iframe> 
    </div> 
    </div> 

CSS

* { box-sizing: border-box; } 
.video-background { 
    background: #000; 
    position: fixed; 
    top: 0; right: 0; bottom: 0; left: 0; 
    z-index: -99; 
} 
.video-foreground, 
.video-background iframe { 
    position: absolute; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
    pointer-events: none; 
} 
@media (min-aspect-ratio: 16/9) { 
    .video-foreground { height: 300%; top: -100%; } 
} 
@media (max-aspect-ratio: 16/9) { 
    .video-foreground { width: 300%; left: -100%; } 
} 

ответ

0

Я нашел здесь tutorial, который объясняет, как установить видео в качестве фона страницы. В этом уроке показано, как сделать видео в качестве полноэкранного фона и фона только для определенной страницы, как вы хотите.

Вам необходимо установить Html и CSS часть для достижения такого фона. На странице учебника приведен пример кода, который вы можете скопировать.

Надеюсь, это поможет вам.

+0

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

+0

Вы уже решили эту проблему? – KENdi

+0

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

2

Я создал простой пример с видеоизображением Youtube, используя прямые ссылки на видеопоток (только для решения YQL/JS/CSS). Запрос YQL не работает здесь на SO иногда, поэтому, не стесняйтесь проверить его в YQL console и на JSfiddle.

var vid = "9PDcJeymhWM", 
 
    streams, 
 
    video_focused = true, 
 
    video_tag = $("#video"), 
 
    video_obj = video_tag.get(0); 
 
$.getJSON("https://query.yahooapis.com/v1/public/yql", { 
 
    q: "select * from csv where url='https://www.youtube.com/get_video_info?video_id=" + vid + "'", 
 
    format: "json" 
 
}, function(data) { 
 
    if (data.query.results) { 
 
     streams = parse_youtube_meta(data.query.results.row.col0); 
 
     video_tag.attr({ 
 
      src: streams['1440p'] || streams['1080p'] || streams['720p'] 
 
     }); 
 

 
     document.addEventListener("visibilitychange", function() { 
 
      video_focused = !video_focused ? video_obj.play() : video_obj.pause(); 
 
     }); 
 
    } 
 
}); 
 

 
function parse_youtube_meta(rawdata) { 
 
    var data = parse_str(rawdata), 
 
     streams = (data.url_encoded_fmt_stream_map + ',' + data.adaptive_fmts).split(','), 
 
     result = {}; 
 
$.each(streams, function(n, s) { 
 
    var stream = parse_str(s), 
 
     itag = stream.itag * 1, 
 
     quality = false, 
 
     itag_map = {18: '360p', 22: '720p', 37: '1080p', 38: '3072p', 82: '360p3d', 83: '480p3d', 84: '720p3d', 85: '1080p3d', 133: '240pna', 134: '360pna', 135: '480pna', 136: '720pna', 137: '1080pna', 160: '144pna', 264: '1440pna', 139: "48kbps", 140: "128kbps", 141: "256kbps"}; 
 
    if (itag_map[itag]) result[itag_map[itag]] = stream.url; 
 
}); 
 
    return result; 
 
}; 
 

 
function parse_str(str) { 
 
    return str.split('&').reduce(function(params, param) { 
 
     var paramSplit = param.split('=').map(function(value) { 
 
      return decodeURIComponent(value.replace('+', ' ')); 
 
     }); 
 
     params[paramSplit[0]] = paramSplit[1]; 
 
     return params; 
 
    }, {}); 
 
}
html, body { 
 
\t height: 100%; 
 
\t min-height: 100%; 
 
\t background: #444; 
 
\t overflow: hidden; 
 
} 
 
video { 
 
\t width: 100%; 
 
\t height: 100%; 
 
\t object-fit: cover; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<video loop muted autoplay playsinline id="video"></video>

+1

Я freaken люблю тебя прямо сейчас. Расходы DAYS пытаются понять это. Все примеры имеют полную страницу! Просто оберните элемент div и весь набор. –

+0

Такая же история, как @ShawnRebelo, ты потрясающий! Единственное, что я заметил, это то, что качество видео не так хорошо (менее гладкое/четкое), как смотреть его прямо на Youtube.Есть ли что-то, что может улучшить качество? My youtube vid имеет 1080p50. Может быть, для 50 кадров в секунду требуется другой тег? – Nicholas

+0

@ Николас Привет. Вы можете расширить форматы потоков и добавить еще несколько: '... 298: '720p60na', 299: '1080p60na', 264: '1440pna' ...', но все эти дополнительные потоки не имеют звука и занимают больше времени, чтобы начать играть. – 350D