videoタグで表示させた動画をjQuery&CSSでフローティングビデオ対応させる方法
2024/04/25
Web上の動画をFloatingVideo対応したいという要望を受けた。ページ上でスクロールした際に右下等に小さい動画を表示させたいというもの。ピクチャーインピクチャーだとブラウザに依存しそうで難しいんじゃないかと思ったけど、そういった仕様であればなんとかなりそう。以下に実装方法とサンプルをメモ。
サンプル
https://taitan916.info/sample/FloatingVideo/video/
上記ページを開くと左上に動画プレイヤーが表示されるがページスクロールすると右下に小さいプレイヤーが表示される。
ソースコード
<html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>videoタグのFloatingVideo対応サンプル</title> </head> <style> body{ padding: 0; margin: 0; } @keyframes fade-in-up{ 0% { opacity: 0; } 100% { transform: translateY(0); opacity: 1; } } video{ width: 100%; max-width: 500px; } .video.stuck { position: fixed; bottom: 0; right: 0; width: 200px; transform: translateY(100%); animation: fade-in-up 0.75s ease forwards; z-index: 1; } .back_ground{ background-color: #ccc; height: 3000px; } </style> <body> <div class="back_ground"> <div class="video_wrap"> <div class="video"> <video controls> <source src="https://taitan916.info/blog/wp-content/uploads/2016/05/test.mp4" type="video/mp4" /> </video> </div> </div> </div> <script type="text/javascript" src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <script> $(function(){ const video_wrap = $('.video_wrap'); const video = $('.video'); const video_height = video.outerHeight(); //ページスクロールした際 $(window).on('scroll', function(){ //スクロール幅がvideoタグ部分の高さを超えた場合 if( $(this).scrollTop() > (video_height + video_wrap.offset().top) ){ //.stackを付与 video.addClass('stuck'); }else{ //.stackを削除 video.removeClass('stuck'); } }); }); </script> </body> </html>
所感
videoタグだと問題無かったのでyoutube動画についてもその内FloatingVideo対応してみたい。
関連記事
-
YouTubeの埋め込み動画をjQuery&CSSでフローティングビデオ対応させる方法
以前にvideoタグで表示させた動画をjQuery&CSSでフローティン ...