【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);
    }
}
相关推荐
莓 有烦恼6 分钟前
HTML04:图像标签
html5
Yensean8 分钟前
Learning vtkjs之MultiSliceImageMapper
javascript·webgl
江沉晚呤时34 分钟前
深入解析 .NET Kestrel:高性能 Web 服务器的架构与最佳实践
服务器·前端·.net
264玫瑰资源库1 小时前
网狐旗舰大联盟组件源码私测笔记:结构分层、UI重构与本地实操全流程
java·前端·数据库·笔记·ui·重构
qq_589568101 小时前
Electron学习+打包
前端·javascript·electron
万叶学编程1 小时前
鸿蒙移动应用开发--ArkTS语法进阶实验
开发语言·javascript·ecmascript
小星jeff1 小时前
rails 8 CSS不起效问题解决
前端·css
小满zs2 小时前
React-router v7 第七章(导航)
javascript·react.js·ecmascript
二川bro2 小时前
前端实现商品放大镜效果(Vue3完整实现)
前端
苏小夕夕3 小时前
大数据应用开发和项目实战-Seaborn
大数据·前端