网页中使用视频作为背景时控帧播放的效果

135 阅读3分钟

1. 效果演示

msedge_msZwnvXiEx.gif msedge_qcieKj4zWY.gif

2. 大概原理

获取网页滚动数据,将数据处理后设置为视频的currentTime

3. 源代码

<!DOCTYPE html>  
<html lang="zh">  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
    <title>视频背景控帧播放</title>  
    <style>  
        body {  
            margin: 0;  
            padding: 0;  
        }  

        ::-webkit-scrollbar {  
            display: none  
        }  

        .container {  
            position: fixed;  
            min-width: 1300px;  
            min-height: 732px;  
            z-index: -1;  
        }  

        .videoBack {  
            width: 100%;  
            height: 100%;  
            position: absolute;  
            object-fit: cover;  
        }  

        .scrollContent {  
            text-align: center;  
            color: white;  
            font-size: 25px;  
        }  
    </style>  
</head>  
<body>  
    <div class="container">  
        <video class="videoBack" preload="auto" muted>  
            <source src="bv86.mp4" type="video/mp4"/>  
        </video>  
    </div>  
    <div class="scrollContent">  
        豫章故郡,洪都新府。<p/>星分翼轸,地接衡庐。<p/>襟三江而带五湖,控蛮荆而引瓯越。<p/>  
        物华天宝,龙光射牛斗之墟;<p/>人杰地灵,徐孺下陈蕃之榻。<p/>  
        雄州雾列,俊采星驰。<p/>台隍枕夷夏之交,宾主尽东南之美。<p/>都督阎公之雅望,棨戟遥临;<p/>宇文新州之懿范,襜帷暂驻。<p/>  
        十旬休假,胜友如云;<p/>千里逢迎,高朋满座。<p/>腾蛟起凤,孟学士之词宗;<p/>紫电青霜,王将军之武库。<p/>家君作宰,路出名区;<p/>  
        童子何知,躬逢胜饯。<p/>时维九月,序属三秋。<p/>潦水尽而寒潭清,烟光凝而暮山紫。<p/>俨骖騑于上路,访风景于崇阿。<p/>  
        临帝子之长洲,得天人之旧馆。<p/>层峦耸翠,上出重霄;<p/>飞阁流丹,下临无地。<p/>鹤汀凫渚,穷岛屿之萦回;<p/>桂殿兰宫,即冈峦之体势。<p/>  
        披绣闼,俯雕甍,山原旷其盈视,`川泽纡其骇瞩`。<p/>闾阎扑地,钟鸣鼎食之家;<p/>舸舰弥津,青雀黄龙之舳。<p/>云销雨霁,彩彻区明。<p/>  
        落霞与孤鹜齐飞,秋水共长天一色。<p/>渔舟唱晚,响穷彭蠡之滨,雁阵惊寒,声断衡阳之浦。<p/>  
        遥襟甫畅,逸兴遄飞。<p/>爽籁发而清风生,纤歌凝而白云遏。<p/>睢园绿竹,气凌彭泽之樽;<p/>邺水朱华,光照临川之笔。<p/>  
        四美具,二难并。<p/>穷睇眄于中天,极娱游于暇日。<p/>天高地迥,觉宇宙之无穷;<p/>兴尽悲来,识盈虚之有数。<p/>  
        望长安于日下,目吴会于云间。<p/>地势极而南溟深,天柱高而北辰远。<p/>关山难越,谁悲失路之人;<p/>萍水相逢,尽是他乡之客。<p/>  
        怀帝阍而不见,奉宣室以何年?<p/>嗟乎!时运不齐,命途多舛。<p/>冯唐易老,李广难封。<p/>  
        屈贾谊于长沙,非无圣主;<p/>窜梁鸿于海曲,岂乏明时?<p/>  
        所赖君子见机,达人知命。<p/>老当益壮,宁移白首之心?<p/>穷且益坚,不坠青云之志。<p/>酌贪泉而觉爽,处涸辙以犹欢。<p/>  
        北海虽赊,扶摇可接;<p/>东隅已逝,桑榆非晚。<p/>孟尝高洁,空余报国之情;<p/>阮籍猖狂,岂效穷途之哭!<p/>  
        勃,三尺微命,一介书生。<p/>无路请缨,等终军之弱冠;<p/>有怀投笔,慕宗悫之长风。<p/>舍簪笏于百龄,奉晨昏于万里。<p/>  
        非谢家之宝树,接孟氏之芳邻。<p/>他日趋庭,叨陪鲤对;<p/>今兹捧袂,喜托龙门。<p/>杨意不逢,抚凌云而自惜;<p/>钟期既遇,奏流水以何惭?<p/>  
        呜呼!胜地不常,盛筵难再;<p/>兰亭已矣,梓泽丘墟。<p/>临别赠言,幸承恩于伟饯;<p/>登高作赋,是所望于群公。<p/>敢竭鄙怀,恭疏短引;<p/>  
        一言均赋,四韵俱成。<p/>请洒潘江,各倾陆海云尔:<p/>  
          滕王高阁临江渚,佩玉鸣鸾罢歌舞。<p/>  
          画栋朝飞南浦云,珠帘暮卷西山雨。<p/>  
          闲云潭影日悠悠,物换星移几度秋。<p/>  
          阁中帝子今何在?槛外长江空自流。<p/>  
    </div>  
    <script>  
        let container = document.querySelector(".container");  
        let videoBack = document.querySelector('.videoBack');  
        let parameters = {  
            lookWidth: 3440,  
            lookHeight: 1440,  
        }  
        window.addEventListener('resize', toResize);  
        toResize();  
        window.addEventListener('scroll', toScroll);  
        videoBack.onloadeddata = () => {  
            toScroll();  
        }  

        function toResize() {  
            parameters.lookWidth = window.innerWidth;  
            parameters.lookHeight = window.innerHeight;  
            container.style.width = parameters.lookWidth + 'px';  
            container.style.height = parameters.lookHeight + 'px';  
        }  

        function toScroll() {  
            let duration = videoBack.duration || 0;  
            let scrollPosition = window.pageYOffset || document.documentElement.scrollTop;  
            // 根据滚动位置来控制视频播放  
            videoBack.currentTime = scrollPosition / (document.body.clientHeight - parameters.lookHeight) * duration;  
        }  
    </script>  
</body>  
</html>