Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 1.01 KB | None | 0 0
  1. // HeightObserver.tsx
  2.  
  3. import * as React from "react";
  4. import {useEffect, useRef} from "react";
  5.  
  6. interface Props {
  7.     className?: string;
  8.     onChangeHeight: (height: number) => void;
  9. }
  10.  
  11. export const HeightObserver: React.FunctionComponent<Props> = (props) => {
  12.     const element = useRef<HTMLDivElement>(null);
  13.  
  14.     useEffect(() => {
  15.         const resizeObserver = new ResizeObserver((entries) =>
  16.             entries.forEach(
  17.                 (entry) => props.onChangeHeight(entry.contentRect.height)
  18.             )
  19.         );
  20.         resizeObserver.observe(element.current!);
  21.     }, []);
  22.  
  23.     return <div
  24.         className={props.className}
  25.         ref={element}
  26.     >
  27.         {props.children}
  28.     </div>;
  29. };
  30.  
  31. /// Usage:
  32.     <HeightObserver onChangeHeight={(parent as any).adjustIframeContentHeight}>
  33.         ...page content...
  34.     </HeightObserver>
  35.  
  36. /// Iframe definition
  37. <iframe
  38.     src="..."
  39.     frameborder="0"
  40.     id="some-iframe"
  41. ></iframe>
  42. <script>
  43.     window.adjustIframeContentHeight = function(height) {
  44.         document.getElementById("some-iframe").style.height = height + "px";
  45.     }
  46. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement