Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <script src="https://unpkg.com/@yaireo/position"></script>
  <title>@yaireo/position - Position DOM element at X,Y or next to another element</title>
</head>
<body>
  
  <div class='ref'>
    <a href='https://github.com/yairEO/position'>
      <img src='https://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Octicons-mark-github.svg/2048px-Octicons-mark-github.svg.png' height=50>
    </a>
  </div>
  
  <div class='target' data-placement='left above'></div>
  <div class='target' data-placement='center above'></div>
  <div class='target' data-placement='right above'></div>
  <div class='target' data-placement='left center'></div>
  <div class='target' data-placement='left below'></div>
  <div class='target' data-placement='center below'></div>
  <div class='target' data-placement='right below'></div>
  <div class='target' data-placement='right center'></div>
  
  <script>
    const targetElements = document.querySelectorAll('.target'),
          refElement = document.querySelector('.ref');
         
    position = position.default;
        
    targetElements.forEach(targetElement => { 
      const initialPlacemenet = targetElement.dataset.placement;
      const observerCallback = () => {
        position({ 
          target    : targetElement, 
          useRaf    : false, 
          ref       : refElement, 
          offset    : [0, 0],
          placement : initialPlacemenet,
          track     : {scroll:true}
        })
      }
      // create observers instances
      const resizeObserver = new ResizeObserver(observerCallback)
      const intersectionObserver = new IntersectionObserver(observerCallback, {root:document, threshold:1})
      // start observing (using the instances created above)
      resizeObserver.observe(document.body)
      resizeObserver.observe(refElement)
      intersectionObserver.observe(targetElement)
    })
  </script>
</body>
</html>
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
yairEOpro
0viewers