#javascript #html #video #popup
#javascript #HTML #Видео #всплывающее окно
Вопрос:
У меня есть этот код, но я не знаю, как скрыть видео при нажатии снаружи.
Вот мой код:
$(".popup").click(function () {
var $this = $(this);
var $iframe = $("<iframe>").attr("src", $this.data("link")).css({"width": 400, "height": 300});
var $title = $("<h1>").text($this.data("title"));
$("#video-view").html($title).append($iframe);
$iframe.wrap("<div class='class-video'>");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="popup" href="#!" data-link="https://www.youtube.com/embed/klModGpSKtc"><img class="img" src="img/annual-smb-report.png"/></a>
<div id="video-view">
</div>
Я перепробовал все, но, очевидно, я делаю что-то не так.
Заранее благодарю вас.
Комментарии:
1. Итак, вы хотите скрыть класс-видео при нажатии за его пределами? Вы можете прикрепить событие щелчка к телу, которое проверяет, существует ли класс class-video, а затем скрыть его, установив css для отображения none . Но зачем вам такое поведение? Не лучше ли было бы иметь кнопку закрытия?
2. Это также может быть кнопка закрытия, потерпите меня, поскольку я новичок, и я могу сказать глупости. Кнопка закрытия может быть также на изображении, которое ее открывает. Можете ли вы показать мне пример того, что вы имеете в виду?
Ответ №1:
В этом примере видео отображается при нажатии на изображение и скрывается при нажатии в любом другом месте:
$(".popup").click(function (e) {
e.stopPropagation();
var $this = $(this);
var $iframe = $("<iframe>").attr("src", $this.data("link")).css({"width": 400, "height": 300});
var $title = $("<h1>").text($this.data("title"));
$("#video-view").html($title).append($iframe);
$iframe.wrap("<div class='class-video'>");
});
$(document).click(function() {
$("#video-view").empty();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="popup" href="#!" data-link="https://www.youtube.com/embed/klModGpSKtc"><img class="img" src="img/annual-smb-report.png"/></a>
<div id="video-view">
</div>
Комментарии:
1. Большое вам спасибо, Фабиан, это работает чудесно, именно то, что мне было нужно 🙂
2. @Alina В данном конкретном случае это работает из-за iframe. Если всплывающее
div
окно появляется всякий раз, когда вы нажимаете даже в самом всплывающем окне, оно закроет всплывающее окно. Подумай, хочешь ли ты этого. (Демонстрацияdiv
того, что закрывает всплывающее окно при щелчке во всплывающем окне: jsbin.com/bumonozipo/edit?html , js, вывод )
Ответ №2:
Хитрость заключается в том, чтобы добавить скрытый слой на весь экран. Когда пользователь нажимает на этот слой, вы скроете фильм.
обратите внимание на z-index
, это важно.
Вот так:
$(".popup").click(function () {
var $this = $(this);
var $iframe = $("<iframe>").attr("src", $this.data("link")).css({"width": 400, "height": 300});
var $title = $("<h1>").text($this.data("title"));
$("#video-view").html($title).append($iframe);
$iframe.wrap("<div class='class-video'>");
$('.overlay').show();
});
$('.overlay').click(function(){
$(this).hide();
$('#video-view').html('');
});
#video-view {
z-index: 2;
position:relative;
display: inline-block;
}
.overlay {
position: absolute;
z-index:1;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="popup" href="#!" data-link="https://www.youtube.com/embed/klModGpSKtc"><img class="img" src="img/annual-smb-report.png"/></a>
<div id="video-view">
</div>
<div class="overlay"></div>