javascript - How to test if an element inside a "carousel" (a container with overflow:hidden" having multiple large children) is visually visible? -


i'm looking generic (native) javascript function tell if element visible, can take account elements in "carousel" (aka "slider");
these containers "slides", each element positioned left (or right) of previous 1 - 1 of them visible.
example can seen in web page: http://www.technobuffalo.com/2015/07/22/iphone-7-concept-sports-quad-hd-retina-display-wireless-charging/

edit: example carousel 3 slides:

<div class="carousel">     <div class="slide" style="left:0"><img src="..." /></div>     <div class="slide" style="left:640px"><img src="..." /></div>     <div class="slide" style="left:1280px"><img src="..." /></div> </div>  <style>    .carousel  {       width: 640px;       height: 460px;       overflow: hidden;    }    .slide {       position: absolute;       width: 100%;       height: 100%;    }  </style> 

the function should return false images not directly visible in carousel.

i've tried numerous techniques suggested in answers in questions regarding visibility detection, amongst them - checking offsetparent, offsetleft, offsetright, , using getcomputedstyle , checking display, , more, of them return true invisible images in carousel.

answering own question.

// function return true if element inside "carousel" visually invisible. function isoffsethidden(elem) {   if (elem.nodename == "body") return false;   // find out if parent of element has 'overflow:hidden':   var p = elem, isoverflow = false;   while ((p=p.parentnode) && p.nodename!=="body") {     if (window.getcomputedstyle(p)['overflow']=="hidden") {       isoverflow = true;       break;     }   }   if (isoverflow) {     var er = elem.getboundingclientrect(),         pr = p.getboundingclientrect();      return (er.right < pr.left || er.bottom < pr.top || er.left < pr.right || er.top < pr.bottom);    }   return false; } 

it works first trying find container overflow:hidden, if element inside container overflow:hidden , "outside of bounds" of container, function returns true.

in while loop need stop when element body, otherwise go on until document , throw error saying argument window.getcomputedstyle "does not implement element interface".

i'll re-edit title of question more specific problem.


Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -

Nuget pack csproj using nuspec -