单图背景无缝滚动模板一:伪元素移动

位置: 首页 > 代码集锦
[发布: 2024.4.7  作者: 马黑  阅读: 121]

这个机制有灵活性,帖子元素的宽高可以不用过于顾及背景图片的实际尺寸。以下代码为实例代码,内含(一个)视频与音频同步控制:

<style> #mydiv {     margin: 20px auto;     width: 960px;     height: 540px;     background: lightgreen url('https://638183.freep.cn/638183/t24/1/levels.jpg') no-repeat center/cover;     box-shadow: 4px 4px 8px gray;     box-sizing: border-box;     overflow: hidden;     z-index: 1;     position: relative; } #mydiv::before , #mydiv::after {     position: absolute;     content: '';     left: var(--begin1);     top: 0px;     width: 100%;     height: 100%;     background: url('https://638183.freep.cn/638183/t24/1/levels.jpg') no-repeat center/cover;     z-index: -1; }   #mydiv::after {     left: var(--begin2);     transform: scale(-1,1); } #play {     position: absolute;     left: calc(50% - 50px);     bottom: 10px;     width: 100px;     cursor: pointer;     animation: rotating 5s linear infinite var(--state); } #vid {     position: absolute;     right: 0;     width: 40%;     height: 30%;     object-fit: cover;     mix-blend-mode: screen;     transform: rotate(-15deg);     pointer-events: none; } @keyframes rotating { to { transform: rotate(360deg); } } </style>   <div id="mydiv">     <audio id="aud" src="https://music.163.com/song/media/outer/url?id=2130363396" autoplay></audio>     <video id="vid" src="https://img.tukuppt.com/video_show/7165162/00/19/81/5f154503b457d.mp4" muted loop></video>     <img id="play" src="https://638183.freep.cn/638183/web/svg/clover4.svg" alt="" /> </div>   <script>   var ww = mydiv.offsetWidth;   var step = 1, begin1 = 0, begin2 = ww, raf;   aud.loop = false; aud.onpause = aud.onplaying = () => moving(); aud.onseeked = () => cancelAnimationFrame(raf); aud.onended = () => { cancelAnimationFrame(raf); aud.play(); };   play.onclick = () => { aud.paused ? aud.play() : aud.pause(); };   var moving = () => {     //自左向右     begin1 += step;     begin2 += step;     if(begin1 >= ww) begin1 = -ww;     if(begin2 >= ww) begin2 = -ww;
/* 自右向左     begin1 -= step;     begin2 -= step;     if(begin1 <= -ww) begin1 = ww;     if(begin2 <= -ww) begin2 = ww; */
    let b2 = begin2 + (begin1 >= 0 ? 1 : -1);     mydiv.style.setProperty('--begin1', begin1 + 'px');     mydiv.style.setProperty('--begin2', b2 + 'px');     aud.paused         ? (cancelAnimationFrame(raf), mydiv.style.setProperty('--state', 'paused'), vid.pause())         : (raf = requestAnimationFrame(moving), mydiv.style.setProperty('--state', 'running'),vid.play()); };   </script>

前一篇: 单图背景无缝滚动模板二:伪元素背景移动
下一篇: canvas放大镜(两种机制)

发表评论:

  
 

评论列表 [1条]

#1 | 悄然 于 2024-4-7 12:43 发布: 这个levels(测试帖)伪元素移动的那版也可以完美无缝线了。。两贴放一起才明白,伪元素移动跟背景移动是两种不同的处理方式。。

Copyright © 2023 All Right Reserved 马黑PHP文章管理整站系统v1.8
联系我们: gxblk@163.com