如何使用@media 和 display:none 只加载一个 IFRAME; CSS
how to only load one IFRAME using @media and display:none; CSS
我正在使用@media CSS 根据设备视口宽度提供 3 种不同尺寸的页面。
我使用 3 所以根据屏幕宽度我隐藏 2 并显示 1
问题是,当我使用 时,即使 iframe 在 display:none 内,它也会加载所有 3 个;
我只需要加载其中一个,主要是加载可见的那个,而不是其他两个隐藏的。
这里是 html
的例子
<div class='s1'>
<p>Full size page content here</p>
<iframe id='frame1' src="chat/flashchat.php" width="513" height="500"> </iframe>
<p> more full size page content here</p>
</div>
<div class='s2'>
<p>Medium size page content here</p>
<iframe id='frame1' src="chat/flashchat.php" width="513" height="500"> </iframe>
<p>More medium content here</p>
</div>
<div class='s3'>
<p>Small page content here</p>
<iframe id='frame1' src="chat/flashchat.php" width="320" height="500"> </iframe>
<p>More small page content here</p>
</div>
这里是 CSS:
@media handheld, screen and (min-width: 768px) {
.s2 {
display: none;
}
.s3 {
display: none;
}
.s1 {
display: block;
}
}
@media handheld, screen and (max-width:767px) and (min-width:513px) {
.s1 {
display: none;
}
.s3 {
display: none;
}
.s2 {
display: block;
}
}
@media handheld, screen and (max-width:512px) {
.s1 {
display: none;
}
.s2 {
display: none;
}
.s3 {
display: block;
}
}
我认为 javascript 可能会提供一个解决方案,但我希望尽可能避免使用该方法。我只能允许这些 IFRAMES 中的一个加载,即使只显示一个 3 次加载搞乱了自动登录功能,因为它实际上加载了 3 次,即使它是隐藏的。
有什么解决这个问题的建议吗?
这是我使用的 JS:
$(document).on('ready', responsiveVideo);
$(window).on('resize', responsiveVideo);
function responsiveVideo() {
var windowWidth = $(window).width();
// Let's make sure that the appropriate video is visible
$('.video-class-selector').each(function() {
if ($(this).hasClass('.js__video-hack')) {
return;
}
var isResponsiveVideo = $(this).parent('.video_mobile_wrapped').length,
BREAKPOINT = 768;
// Replace visible iframes with a proper iframe with a valid src attribute
var $original = $(this).find('iframe');
if ((isResponsiveVideo && windowWidth < BREAKPOINT) || (!isResponsiveVideo && windowWidth >= BREAKPOINT)) {
var $clone = $original.clone();
$clone.attr('src', $clone.attr('data-src'));
$original.replaceWith($clone);
$(this).addClass('js__video-hack');
}
});
}
我的 iframe 标记如下所示:
<div class="video-class-selector">
<iframe data-src="..." ...></iframe>
</div>
响应式包裹在 div 中 class video_mobile_wrapped:
<div class='video_mobile_wrapped'>
<div class="video-class-selector">
<iframe data-src="..." ...></iframe>
</div>
</div>
我正在使用@media CSS 根据设备视口宽度提供 3 种不同尺寸的页面。
我使用 3 所以根据屏幕宽度我隐藏 2 并显示 1
问题是,当我使用 时,即使 iframe 在 display:none 内,它也会加载所有 3 个;
我只需要加载其中一个,主要是加载可见的那个,而不是其他两个隐藏的。
这里是 html
的例子<div class='s1'>
<p>Full size page content here</p>
<iframe id='frame1' src="chat/flashchat.php" width="513" height="500"> </iframe>
<p> more full size page content here</p>
</div>
<div class='s2'>
<p>Medium size page content here</p>
<iframe id='frame1' src="chat/flashchat.php" width="513" height="500"> </iframe>
<p>More medium content here</p>
</div>
<div class='s3'>
<p>Small page content here</p>
<iframe id='frame1' src="chat/flashchat.php" width="320" height="500"> </iframe>
<p>More small page content here</p>
</div>
这里是 CSS:
@media handheld, screen and (min-width: 768px) {
.s2 {
display: none;
}
.s3 {
display: none;
}
.s1 {
display: block;
}
}
@media handheld, screen and (max-width:767px) and (min-width:513px) {
.s1 {
display: none;
}
.s3 {
display: none;
}
.s2 {
display: block;
}
}
@media handheld, screen and (max-width:512px) {
.s1 {
display: none;
}
.s2 {
display: none;
}
.s3 {
display: block;
}
}
我认为 javascript 可能会提供一个解决方案,但我希望尽可能避免使用该方法。我只能允许这些 IFRAMES 中的一个加载,即使只显示一个 3 次加载搞乱了自动登录功能,因为它实际上加载了 3 次,即使它是隐藏的。
有什么解决这个问题的建议吗?
这是我使用的 JS:
$(document).on('ready', responsiveVideo);
$(window).on('resize', responsiveVideo);
function responsiveVideo() {
var windowWidth = $(window).width();
// Let's make sure that the appropriate video is visible
$('.video-class-selector').each(function() {
if ($(this).hasClass('.js__video-hack')) {
return;
}
var isResponsiveVideo = $(this).parent('.video_mobile_wrapped').length,
BREAKPOINT = 768;
// Replace visible iframes with a proper iframe with a valid src attribute
var $original = $(this).find('iframe');
if ((isResponsiveVideo && windowWidth < BREAKPOINT) || (!isResponsiveVideo && windowWidth >= BREAKPOINT)) {
var $clone = $original.clone();
$clone.attr('src', $clone.attr('data-src'));
$original.replaceWith($clone);
$(this).addClass('js__video-hack');
}
});
}
我的 iframe 标记如下所示:
<div class="video-class-selector">
<iframe data-src="..." ...></iframe>
</div>
响应式包裹在 div 中 class video_mobile_wrapped:
<div class='video_mobile_wrapped'>
<div class="video-class-selector">
<iframe data-src="..." ...></iframe>
</div>
</div>