简体   繁体   English

如何隐藏不在视口中的div

[英]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 您可以

  1. get the scroll position with scrollLeft 使用scrollLeft获取滚动位置
  2. get position of children with getBoundingClinetRect 使用getBoundingClinetRect获取孩子的位置
  3. and do simple Math to check if element is 100% inside viewport. 并执行简单的数学运算以检查元素是否在视口内100%。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM