【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);
    }
}
相关推荐
YL雷子3 小时前
纯前端使用ExcelJS插件导出Excel
前端·vue·excel
什么什么什么?3 小时前
el-table高度自适应vue页面指令
前端·javascript·elementui
冬夜戏雪6 小时前
nginx改配置文件还是会访问默认nginx欢迎页面排查 + 域名访问
css·nginx·css3
码上暴富7 小时前
axios请求的取消
前端·javascript·vue.js
JefferyXZF7 小时前
Next.js 初识:从 React 到全栈开发的第一步(一)
前端·全栈·next.js
一只韩非子8 小时前
AI时代,程序员如何优雅地搞定页面设计?
前端·ai编程
新中地GIS开发老师8 小时前
2025Mapbox零基础入门教程(14)定位功能
前端·javascript·arcgis·gis·mapbox·gis开发·地理信息科学
tager8 小时前
Vue 3 组件开发中的"双脚本"困境
前端·vue.js·代码规范
烛阴9 小时前
Int / Floor
前端·webgl
excel9 小时前
使用 PWA 时,为什么你必须手动添加更新逻辑,否则会报错?
前端