ibrahimcesar / react-lite-youtube-embed

📺 ‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎< A private by default, faster and cleaner YouTube embed component for React applications />
https://www.npmjs.com/package/react-lite-youtube-embed
MIT License
269 stars 41 forks source link

you need to double click while using this on mobile #50

Open AyushJain-18 opened 2 years ago

AyushJain-18 commented 2 years ago

Describe the bug A clear and concise description of what the bug is.

To Reproduce Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior A clear and concise description of what you expected to happen.

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

Smartphone (please complete the following information):

Additional context Add any other context about the problem here.

ahmadelgamal commented 2 years ago

The problem is that when I click on a link on a mobile device (Android and iOS) the first click does not open the YouTube video. However, if I click a second time it does, as long as I don't click on another video before the second consecutive click on the first.

jonathanpauluze commented 2 years ago

This is not a problem from the package, youtube autoplay controls doesn't work on Android and iOS devices (maybe because of mobile data).

I would suggest to create a prop to detect when the element is appearing on the screen and switch the image to the youtube player.

FunctionDJ commented 2 years ago

Maybe with #61 it could be possible to start the video through JS from inside the iframe?

olaf89 commented 1 year ago

I have the same problem, do you have any workarounds?

andreisucman commented 1 year ago

A workaround is to use intersection observer that would automatically click the play button once the facade is in view. Therefore the user will see the actual iframe by the time he scrolls to the video and will only have to click it once. Here is how to do it with react.

useEffect(() => {
    const button = document.querySelector(".lty-playbtn");

    if (!button) return;

    function createObserver() {
      let observer;

      let options = {
        rootMargin: "-50%",
        threshold: 1,
      };

      observer = new IntersectionObserver(() => button.click(), options);
      observer.observe(button);
    }
    return createObserver();
  }, []);
ahmedmusawir commented 1 year ago

THANK YOU andreisucman ... you are a true scholar ... your solution worked like a charm ... I just had to loop thru multiple buttons that's all. Thanx again!