[英]How to Hide div that is not in viewport
I asked before but it was unsuccessful, so, here I'm again. 我之前曾问过,但没有成功,所以,我又来了。
I will have a lot of divs inside container, 3 of them can be in viewport, but one div that will be next to be shown on click is half visible, now I want to ask: do you know how can I hide the element as long as it is not 100% in viewport? 我将在容器中有很多div,其中3个可以在视口中,但单击时将要显示的一个div可见一半,现在我想问一问:您知道如何将元素隐藏为只要它不是100%的视口?
.container{ width:1000px; white-space:no-wrap; overflow:hidden; } .block-element{ width:300px; display: inline-block; }
<div class="container"> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> </div>
I think you can fix this using a @mediaquery 我认为您可以使用@mediaquery修复此问题
if your container is 1000px: 如果您的容器为1000像素:
@media screen and (max-width:999px) { .element {visibility: hidden;} }
Is this what you looking for? 这是您要找的东西吗?
In order to achieve something like that you need to have another div wrapping all block-element divs and width of the wrapping div should be more than the div which has overflow:hidden
. 为了实现这样的目标,您需要让另一个div包装所有块元素div,并且包装div的宽度应大于具有overflow:hidden
的div。
For Example: 例如:
I have wrapped all .block-element
with .block-wrap
div and set the with of .block-wrap
to 5000px which is bigger than .container
我已包裹所有.block-element
与.block-wrap
DIV并设置与.block-wrap
到5000px比更大.container
.container{ width:1000px; white-space:no-wrap; overflow:hidden; } .block-wrap{ width:5000px; } .block-element{ width:300px; display: inline-block; }
<div class="container"> <div class="block-wrap"> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> </div> </div>
Try $( window ).width(); 尝试$(window).width();
$(function() { var window_width = $( window ).width(); $('.container').width(window_width); });
.container{ width:1000px; white-space:no-wrap; overflow:hidden; } .block-element{ width:300px; display: inline-block; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <div class="container"> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> </div>
You can 您可以
scrollLeft
使用scrollLeft
获取滚动位置 getBoundingClinetRect
使用getBoundingClinetRect
获取孩子的位置 This is not that usable as user doesn't have a hint of elements existing to the right or left. 这不是可用的,因为用户没有左右两侧存在的元素提示。 You can modify this easily to update the opacity as the element is revealed more and reaches 1 when fully in viewport. 您可以轻松地修改此选项,以更新不透明度,因为元素会显示得更多,并且在完全位于视口中时达到1。
window.onscroll = window.onload = function() { console.log('scrolled'); document.querySelectorAll('.block-element').forEach(setOpacity); } function setOpacity(e) { var scrollAdjust = document.querySelector('body').scrollLeft; var left = e.getBoundingClientRect().left; var right = e.getBoundingClientRect().right; var adjustedLeft = left + scrollAdjust; var adjustedRight = right + scrollAdjust; var maxRight = document.querySelector('body').getBoundingClientRect().width; console.log(maxRight); var leftOverflow = left; var rightOverflow = maxRight - right; if (leftOverflow < 0 || rightOverflow < 0) { e.style.visibility = "hidden"; } else { e.style.visibility = "visible"; } }
.container { width: 1000px; white-space: no-wrap; overflow: hidden; } .block-element { width: 300px; display: inline-block; border: 1px solid red; }
<div class="container"> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> <div class="block-element">lorem ipsum dolor sit ametlorem ipsum dolor sit ametlorem ipsum dolor sit amet</div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.