【HTML5】老式放映机原理-实现图片无缝滚动

老式放映机原理-实现图片无缝滚动

实现思路:

页面设计部分------先将视口div设置为相对定位,再视口div里面嵌套一个类似"胶卷"的div,把该div设置为绝对定位,此时"胶卷"会挂靠在视口上面,再将"胶卷"的left属性设置为负值,实现向左移动"胶卷"。要想实现无缝滚动还需复制一块一摸一样的"胶卷",当第一个胶卷向左滚动,第二块胶卷紧跟着第一块胶卷后面,从视觉上实现第一个胶卷上向左滚动时第一个消失的图片又从后面出现了,从而达到无缝滚动的视觉效果。

1.页面布局

复制代码
<div class="scroll">
        <ul class="scroll_list">
            <li class="scroll_list_item"><a>图片1</a></li>
            <li class="scroll_list_item"><a>图片2</a></li>
            <li class="scroll_list_item"><a>图片3</a></li>
            <li class="scroll_list_item"><a>图片4</a></li>
            <li class="scroll_list_item"><a>图片5</a></li>
            <li class="scroll_list_item"><a>图片6</a></li>
            <li class="scroll_list_item"><a>图片7</a></li>
            <li class="scroll_list_item"><a>图片8</a></li>
        </ul>
    </div>

2.css样式设置

复制代码
*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
li{
    list-style: none;
}
a{
    text-decoration: none;
}
.scroll{
    height: 300px;
    width: 1200px;
    border: 1px solid red;
    margin: 0 auto;
    position: relative;
    overflow: hidden;
}
.scroll_list{
    display: flex;
    flex-direction: row;
    margin-right: 10px;
    position: absolute;
    left: 0;
}
.scroll_list_item{
    margin-top: 15px;
    width: 180px;
    height: 260px;
    border: 1px solid blue;
}

3.js部分

复制代码
window.onload = function(){
    scroll_list();
}

/**  
 * seckill_time  无缝滚动
 * 
 */
function scroll_list() {
    // 1 第一步 获取元素
    let scrollWraper = document.querySelector('.scroll');
    let scrollWraperList = document.querySelector('.scroll_list');  
    
    // 2 第二步 复制一份子节点
    let oHtml  =scrollWraperList.innerHTML;
    oHtml += oHtml;
    scrollWraperList.innerHTML = oHtml;
    // 3 第三步 计算scrollWraperList宽度   一个li宽度* li的个数
    
   let length = scrollWraperList.children.length;
   let aLiWidth = scrollWraperList.children[0].offsetWidth;
   scrollWraperList.style.width = aLiWidth * length + "px";
    // 4 第四步 滚动
    let left = 0;
    let timer =setInterval(move, 10);
    function move() {
        left--;
        if (left < - scrollWraperList.offsetWidth / 2) {
            left = 0;
        }
        scrollWraperList.style.left = left + "px";
    }
    scrollWraper.onmouseover = function(){
        clearInterval(timer);
    }
    scrollWraper.onmouseout = function(){
        timer =setInterval(move, 10);
    }
}
相关推荐
豆苗学前端几秒前
写给女朋友的第一封信,测试方法概论
前端·后端·设计模式
半桶水专家17 分钟前
Vue 3 插槽(Slot)详解
前端·javascript·vue.js
袁煦丞18 分钟前
本地AI绘画神器+全局访问——Stable Diffusion WebUI 成功突破:cpolar内网穿透实验室第462个成功挑战
前端·程序员·远程工作
一枚前端小能手18 分钟前
🏗️ JavaScript类深度解析 - 从构造函数到现代特性的完整指南
前端·javascript
袁煦丞26 分钟前
家用NAS+云盘自由NanoPi R4S+iStoreOS:cpolar内网穿透实验室第460个成功挑战
前端·程序员·远程工作
浏览器API调用工程师_Taylor1 小时前
日报自动化实战:告别手动复制粘贴
前端·javascript·node.js
晴殇i1 小时前
JavaScript还能这样写?!ES2025新语法让代码优雅到极致
前端·javascript·程序员
浏览器API调用工程师_Taylor1 小时前
我是如何将手动的日报自动化的☺️☺️☺️
前端·javascript·爬虫
东哥很忙XH1 小时前
flutter开发的音乐搜索app
android·javascript·flutter
前端Hardy2 小时前
HTML&CSS&JS:抖音爆火的满屏“关心弹幕”酷炫卡片,已经帮你打包好了,快来体验吧!
前端·javascript·css