js实现无缝滚动思路及代码(js图片无缝滚动的原理)

发布时间:2023-12-08

js实现无缝滚动思路及代码(js图片无缝滚动的原理)

更新: 2022-11-11 21:07

本文目录一览:

  1. js中无缝滚动轮播图有多少种做法?
  2. JS无缝滚动图片的代码 麻烦大神帮我解释下每句的含义
  3. js 无缝滚动只滚动一次
  4. js图片无缝滚动的原理是什么
  5. javascript实现平滑无缝滚动

js中无缝滚动轮播图有多少种做法?

还有就是用原生js模仿jQuery写一个动画函数,最简单版的就是:

var timer = null;
function ani(ele, target) {
    clearInterval(ele.timer);
    ele.timer = setInterval(function () {
        var step = (target - ele.offsetLeft) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        ele.style.left = ele.offsetLeft + step + "px";
        console.log(1);
        if (Math.abs(target - ele.offsetLeft) <= Math.abs(step)) {
            ele.style.left = target + "px";
            clearInterval(ele.timer);
        }
    }, 30);
}

利用动画实现图片位置的移动,也是放一个图片到前面。 第二个就是还是放一张图到前面,然后把带图片的li定位;用一个arr = [{left:0}, {left:"200px"}, {left:"400px"}, {left:"600px"}];这样的数组把值分别赋给li;要滚动的时候把arr的最后一项放到最前面,再依次赋值给li,加上过渡就是轮播了,当然直接跳的那一下把过渡关了才是无缝轮播。

JS无缝滚动图片的代码 麻烦大神帮我解释下每句的含义

var speed = 10; // 图片左移速度时间毫秒,数字越大速度越慢
var tab = document.getElementById("demo");
var tab1 = document.getElementById("demo1");
var tab2 = document.getElementById("demo2");
tab2.innerHTML = tab1.innerHTML; // 克隆demo1为demo2
tab.scrollTop = tab.scrollHeight;
function Marquee() {
    if (tab2.offsetWidth - tab.scrollLeft <= 0) // 当demo滚动至demo2的交界处,即与demo2重合时,offsetWidth与scrollLeft刚好相等
        tab.scrollLeft -= tab1.offsetWidth; // demo跳回初始位置
    else {
        tab.scrollLeft++; // demo开始重新移动
    }
}
// setInterval让MyMar方法每隔多少秒执行一次,并把返回的调用次数ID
var MyMar = setInterval(Marquee, speed);
tab.onmouseover = function () { clearInterval(MyMar); }; // 当鼠标移动到demo上时,调用clearInterval清除MyMar,这样图片便不会移动了
tab.onmouseout = function () { MyMar = setInterval(Marquee, speed); }; // 重新setInterval让方法执行,这样图片会继续移动

js 无缝滚动只滚动一次

应该是图片高度或宽度不够,不知道你是左右滚动还是上下滚动。你多放几张图片,这个原理是必须图片加在一起的高度或宽度(看上下滚动还是左右滚动而定)必须大于div的高度或者宽度,他就能连续不断的滚动了。

js图片无缝滚动的原理是什么

以垂直滚动为例:一组图片 控制它的滚动条进行滚动 且此时对这组图片进行复制并添加进原图片组中,现在就有两组图片了。你可以想象一下,现在滚动条继续滚动,原来那组图片最后一张图片已经滚至顶端且消失,复制的那组图片的第一张跟在原图最后一张图片后出现,此时你就能感觉到无缝滚动了,而就在此刻我们将滚动条高度设置为0(因为速度很快,所以不会出现停顿感),你感觉图片就这样一直不停的滚动下去了。关键点在于元素的复制、添加,以及滚动条距离的获取和修改。网上代码很多,都是基于这类构思。

javascript实现平滑无缝滚动

本文我们实现纯JS方式的滚动广告效果,供大家参考,具体内容如下: 先show一下成品:

网页样式:

#demo {
    background: #FFF;
    overflow: hidden;
    border: 1px dashed #CCC;
    width: 1280px;
    height: 200px;
}
#demo img {
    border: 3px solid #F2F2F2;
}
#indemo {
    float: left;
    width: 800%;
}
#demo1 {
    float: left;
}
#demo2 {
    float: left;
}

布局如下:

<div id="demo">
    <div id="indemo">
        <div id="demo1">
            <a href="#"><img src="banner.jpg" border="0" /></a>
            <a href="#"><img src="banner2.jpg" border="0" /></a>
        </div>
        <div id="demo2"></div>
    </div>
</div>

具体的JS实现:

var speed = 10;
var tab = document.getElementById("demo");
var tab1 = document.getElementById("demo1");
var tab2 = document.getElementById("demo2");
tab2.innerHTML = tab1.innerHTML;
function Marquee() {
    if (tab2.offsetWidth - tab.scrollLeft == 0)
        tab.scrollLeft -= tab1.offsetWidth;
    else {
        tab.scrollLeft++;
    }
}
var MyMar = setInterval(Marquee, speed);
tab.onmouseover = function () { clearInterval(MyMar); };
tab.onmouseout = function () { MyMar = setInterval(Marquee, speed); };

这里要注意的是:

  • scrollLeft 代表页面利用滚动条滚动到右侧时,隐藏在滚动条左侧的页面的宽度。
  • offsetWidth 是对象的可见宽度,包含滚动条等边线,会随窗口的显示大小改变。
  • setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。 明白了这个具体的实现就好理解了。 实现的原理是这样的:首先将需要滚动的内容复制一份。当右侧的div显示的内容与左侧隐藏的内容宽度相同时将父容器左侧隐藏的内容显示出来,这样就实现了将左侧隐藏的内容显示出来同时将右侧内容重新隐藏。如果右侧内容显示的部分少于左侧隐藏的内容就继续将父容器向左侧移动,实现隐藏。其中有一点需要注意的是,由于这里是将两张图片同时放入左侧,当右侧显示了一半时会将左侧隐藏的完全显示出来,又因为右侧显示的内容与左侧的左边内容相同所以实现了循环滚动的效果。 这样平滑的滚动就实现了。 以上就是本文的全部内容,希望对大家的学习有所帮助。