js无缝滚动

1.html代码

<div class="box">
        <ul>
            <li class="show"><img src="images/1.jpg"></li>
            <li><img src="images/2.jpg"></li>
            <li><img src="images/3.jpg"></li>
            <li><img src="images/4.jpg"></li>
            <li><img src="images/5.jpg"></li>
        </ul>
        <ol>
            <li class="active">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ol>
    </div>

2.css代码

<style type="text/css">
    body, div, ul ,li, ol{margin:0;padding:0;}
    img{border:none;vertical-align: top}
    li{list-style: none}
    .box{width:470px;height: 150px;margin:30px auto;overflow:hidden;position: relative;}
    ul{width:470px;height: 150px;position: absolute;left:0;top:0;z-index:1;}
    ul li{float: left;width: 470px;}
    ul li.show{display: block;}
    ol{position: absolute;right: 10px;bottom:10px;z-index: 2;width:120px}
    ol li{float: left;width: 20px;height:20px;background: #fff;color:orange;margin-right:3px;line-height: 20px;text-align: center;cursor:pointer;}
    ol li.active{background: orange;color:#fff;}
    </style>

3.js

window.onload = function(){
        var oUl = document.getElementsByTagName(‘ul‘)[0],
            oOL = document.getElementsByTagName(‘ol‘)[0],
            aLi = oUl.getElementsByTagName(‘li‘),
            aOL = oOL.getElementsByTagName(‘li‘),
            oneHeight = aLi[0].offsetHeight,
            iNow = 0,
            iNow2 = 0,
            time = null,
            oBox = document.querySelector(‘.box‘);
            for(var i=0; i<aLi.length;i++){
                aOL[i].index = i;
                aOL[i].onclick = function(){
                    for(var j=0; j<aOL.length; j++){
                        aOL[j].className = ‘‘;
                    }
                aOL[this.index].className = ‘active‘;
                iNow = this.index;
                startMove(oUl,{top : -this.index*oneHeight})
                }
            }

            time = setInterval(run,1000)
            oBox.onmouseover = function(){
                clearInterval(time);
            }
            oBox.onmouseout = function(){
                time = setInterval(run,1000)
            }
            function run(){
                if(iNow == 0){
                    aLi[0].style.position = ‘static‘;
                    oUl.style.top = 0;
                    iNow2 = 0;
                }
                if(iNow == aLi.length - 1){
                    iNow = 0;
                    aLi[0].style.position = "relative";
                    aLi[0].style.top = aLi.length*oneHeight + ‘px‘;
                }else{
                iNow++;
                }
                iNow2++;
                    for(var j=0; j<aOL.length; j++){
                        aOL[j].className = ‘‘;
                    }
                    aOL[iNow].className = ‘active‘;
                startMove(oUl,{top : -iNow2*oneHeight})
            }
    }

4.运动框架

// JavaScript Document

function startMove(obj,json,endFn){

        clearInterval(obj.timer);

        obj.timer = setInterval(function(){

            var bBtn = true;

            for(var attr in json){

                var iCur = 0;

                if(attr == ‘opacity‘){
                    if(Math.round(parseFloat(getStyle(obj,attr))*100)==0){
                    iCur = Math.round(parseFloat(getStyle(obj,attr))*100);

                    }
                    else{
                        iCur = Math.round(parseFloat(getStyle(obj,attr))*100) || 100;
                    }
                }
                else{
                    iCur = parseInt(getStyle(obj,attr)) || 0;
                }

                var iSpeed = (json[attr] - iCur)/8;
            iSpeed = iSpeed >0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
                if(iCur!=json[attr]){
                    bBtn = false;
                }

                if(attr == ‘opacity‘){
                    obj.style.filter = ‘alpha(opacity=‘ +(iCur + iSpeed)+ ‘)‘;
                    obj.style.opacity = (iCur + iSpeed)/100;

                }
                else{
                    obj.style[attr] = iCur + iSpeed + ‘px‘;
                }

            }

            if(bBtn){
                clearInterval(obj.timer);

                if(endFn){
                    endFn.call(obj);
                }
            }

        },30);

    }

    function getStyle(obj,attr){
        if(obj.currentStyle){
            return obj.currentStyle[attr];
        }
        else{
            return getComputedStyle(obj,false)[attr];
        }
    }

5.一个无缝滚动的效果就做了出来

时间: 2024-08-24 15:44:33

js无缝滚动的相关文章

js无缝滚动原理及详解[转自刹那芳华]

刚刚接触JS,网上找了一些关于无缝滚动的教程,但都大同小异,对我这种新手来说也只是会用,不知道什么意思,想要自己写个更是一头雾水.于是找了一些资料,详细说明一下JS无缝滚动的原理,相信看过这篇文章之后,自己写一个滚动效果不会是什么难题了.    本文以CSS+div+js为例,详细说明无缝滚动实现原理.    首先建立四个层(div). 结构如下: id="a"(以下简称a,id="b"简称为b)为轮播的可视部分,b为轮播部分,b_1为轮播内容,但b_2和b_1要在

JS——无缝滚动

1.描述——无缝滚动图片 2.代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{margin:0;padding: 0;} .box{ width:600px; height:200px; border:1px solid gray; ma

JS 无缝滚动 走马灯

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

Javascript图片无缝滚动

js无缝滚动效果几乎在任何网页上都能看到它的身影,有的可能是使用插件,其实使用原始的javascript比较简单. 主要的是使用js位置知识. 1.innerHTML:设置或获取元素的html标签 2.scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距 3.offsetWidth:设置或获取指定标签的宽度 4.setInterval():设置方法定时启动 5.clearInterval();清除定时器 效果图: 先睹为快:demo <!DOCTYPE html>

JS 实现无缝滚动动画原理(初学者入)

这段时间在教培训班的学生使用原生javascript实现无缝滚动的动画案例,做了这个原理演示的动画,分享给自学JS的朋友!博主希望对你们有帮助! 在讲解之前先看一下demo: demo:https://224137748.github.io/JS_warehouse/lunbo/domo.HTML源码:https://github.com/224137748/JS_warehouse/blob/master/lunbo/domo.HTML ps: 上面和下面的滚动进度是一致的,上面红色框是为了演

js从右向左无缝滚动原理

今天公司的首页新增一个公告需求,类似于如下这段代码的效果,做完以后仔细思考了一下其中的原理 在说原理之前建议先看看我上一篇 HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解 这篇文章,里面例图即视化的解释了各种定位的不同,以及在各浏览器下不同的解析结果. 不敲太多的文字,直接上代码,干货都在注释里 <!DOCTYPE html> <head> <meta http-equiv="Content-

带无缝滚动的轮播图(含JS运动框架)

今天学习了一下轮播图的写作,想到前一阵学过的无缝滚动得思想,所以就把轮播与滚动结合了一下.不过我的代码的神逻辑我自己都不敢恭维,在没网没参照的情况下,只能硬着头皮往下写,希望跟大家共勉吧. js运动框架的代码如下: 1 //获取样式 2 function getStyle(obj,attr){ 3 if(obj.currentStyle){ 4 return obj.currentStyle[attr]; 5 }else{ 6 return getComputedStyle(obj,false)

js图片无缝滚动代码

想必大家都注意到<marquee>的不循环滚动,所以出现了很多替代脚本,或iframe或JS输出<marquee>,不管怎么做,都略显麻烦.下面说一下这个相对简单的实现思路:一个设定宽度并且隐藏超出它宽度的内容的容器demo,里面放demo1和 demo2,demo1是滚动内容,demo2为demo1的直接克隆,通过不断改变demo1的scrollTop或者scrollLeft达到滚动的目的,当滚动至demo1与demo2的交界处时直接跳回初始位置,因为demo1与demo2一样,

常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全

常用JS图片滚动(无缝.平滑.上下左右滚动)代码大全 今天刚网上看的 不多说直接帖代码---- <head><-----></head><body> <!--向下滚动代码开始--><div id="colee" style="overflow:hidden;height:253px;width:410px;"><div id="colee1"><p>&