图片无缝滚动就是图片一直不停的滚动,好像没有无穷无尽似的,实际上就是几张图片不停的循环,但是看不出有从最后面切换到最前面的效果,这就是无缝滚动,文字和图片都可以无缝滚动,这里介绍的是图片,文字是同样的原理。

原理

以向上无缝滚动为例,其余几个方向的无缝滚动原理是一样的,点击向上无缝滚动。

设定一个可视区域,超过可视区域的部分隐藏,这里是将nav部分作为可视区域,ul#img是中包含所有的图片,实现无缝滚动的关键地方在这:

if(nav.scrollTop==list[list.length-1].offsetTop){

nav.scrollTop=0

}else{

nav.scrollTop++;

}

这里的nav.scrollTop是指当前的可视对象nav的顶端与正在显示的对象ul#img的顶端的距离,通俗一点来说,就是滚动条向下滚动的距离;list[i]就是要显示的图片列表,list[list.length-1]是指最后一张图片,list[list.length-1].offsetTop是指最后一张图片的顶部到它的父元素的顶部的距离,这个距离是不变固定的,父元素的position必须不能是static(默认的),而且也不能是div,否则会跳过这个元素把上一级当成父元素。

当向下滚动的距离与list[list.length-1].offsetTop的距离相等时,即图片5已经划过,到了显示图片1的时候,让滚动的距离瞬间为0,进行切换时由于两张图片是一样的,人观看时察觉不到,故形成了无缝滚动。

可以发现这里重叠了一张图片,是因为当最后一张图片滚动完之后要形成循环,可视区域内一定要有图片否则一片空白,这里设定的可视区域就是一张图片的高度,故重复的是图片1,如果比一张图片高度要大,则需按顺序多重复几张图片列表的图片。

html部分

四个方向:向上、向下、向左、向右的无缝滚动的html部分是一样的,就表现的部分是一样的,即

无缝滚动

这里需要注意以下:设定的是5张720*405尺寸图片的循环滚动,但是要实现无缝滚动需在后面重复的添加几张图片,具体几张要根据可视区域是图片高度(向上,向下滚动)或宽度(向左,向右滚动)的几倍来确定,我这里设置可视区域的宽度为405px,故只需要重复一张即可,若假设是500px,则需重复两张,类似这样计算。

css部分

这里以向上滚动为例,其余四个方向的样式是类似的,只有些许地方不一样。这里需要注意几点:

1、nav是可视区域,一定要设置宽高,而且overflow要设置为hidden,否则移动不了;

2、ul#img的position要设置,否则默认为static,会影响offsetTop属性,因为父元素的position不能为static,否则会跳过该元素往上一级寻找;

3、要设置ul#img里面的li元素,否则图片上下都会有2px的空白,影响滚动时的效果。

向上、向下滚动样式

两者样式一样。ul#img的高度要是所有图片的总高度,但是由于li本来就是块级元素是由上往下排列的,不设置ul#img的高度也可以,但是向左或向右移动时,必须设置ul#img的宽度为所有图片的总宽度,这里为保持一致就设置了高度为所有图片的总高度;

*{

padding: 0;

margin: 0;

}

nav {

width: 720px;

height: 405px; /*设置可见部分的高度*/

margin: 40px auto;

border: 5px solid #eee;

overflow: hidden;

}

#img{

width: 720px;

height:2430px;/*设置可见部分的高度*/

position: relative;/*默认是static*/

}

#img li{

width: 720px;

height:405px;/*不设置则上下都会有2px的空白*/

}

向上左、向右滚动样式

两者样式一样。向左、向右滚动时要用float:left让li元素在一行并排显示,而没有用display:inline-block是因为图片这样显示会有空隙,是因为行内元素产生的间隔,故用浮动。这里必须要设置ul#img的宽度为图片的总宽度。

*{

padding: 0;

margin: 0;

}

nav {

width: 720px;

height: 405px; /*设置可见部分的高度*/

margin: 40px auto;

border: 5px solid #eee;

overflow: hidden;

}

#img{

width: 4320px;

height:405px;/*设置可见部分的高度*/

position: relative;/*默认是static*/

}

#img li{

width: 720px;

height:405px;

float:left;

}

JavaScript部分

这里以向上滚动为例,JavaScript代码很简单,往下的滚动就是改变一下scrollTop就行,而左右方向就是将scrollTop变成scrollLeft,offsetTop换成offsetLeft就行。

var nav=document.getElementsByTagName('nav')[0];

var list=document.getElementById('img').getElementsByTagName('li');

function scroll() {

if(nav.scrollTop==list[list.length-1].offsetTop){

nav.scrollTop=0;

}else{

nav.scrollTop++;

}

}

var timer= setInterval(scroll,10);

nav.οnmοuseοver=function(){

clearInterval(timer);

};

nav.οnmοuseοut=function () {

timer=setInterval(scroll,10);//必须得对timer重新赋值

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

html无缝滚动原理,JavaScript实现图片无缝滚动效果相关推荐

  1. 【web前端】JavaScript实现图片幻灯片滚动播放动画效果

    JavaScript实现图片幻灯片滚动播放动画效果 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.co ...

  2. JavaScript html 图片滑动切换效果,幻灯片式切换,新闻展示,滚动新闻

    新闻展示,滚动新闻 程序说明 原理就是通过不断设置滑动对象的left(水平切换)和top(垂直切换)来实现图片切换的动态效果. 首先需要一个容器,程序会自动设置容器overflow为hidden,如果 ...

  3. 竖屏图片滚动html5,JavaScript实现图片DIV竖向滑动的方法

    /p> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 图片滑动展示效果 var $$ = fun ...

  4. Javascript实现图片轮播效果。

    用js做一个简单的图片轮播效果. 思路如下:用JavaScript来控制轮播的图片的样式(margin-left).用计时器来控制图片的自动播放.鼠标点击控制图片的翻页. 效果图如下.具有以下功能:1 ...

  5. html 图片自动滚动播放,JS实现图片自动滚动(图片横向滚动)

    实带道术用量确示常构端析以要效开的用,近不现的效果就是 一排图片自动横向滚动,鼠标指向的时候,暂定滚动,鼠标离开,继续滚要圈器是天的年编功小还久概据含直这请框结业未商屏页屏随会维气大机域页效实一应控高 ...

  6. html土图片滚动特效,jQuery实现图片左右滚动特效

    本文实例讲述了jQuery合作伙伴左右滚动特效,分享给大家供大家参考,具体如下: 一款基于jQuery合作伙伴左右滚动特效代码,是一款带左右箭头及自动滚动友情链接合作伙伴左右滚动网页特效,鼠标滑过停止 ...

  7. html图片纵向无缝滚动,HTML内容或图片无缝滚动技巧

    要让HTML页面的内容或图片实现无缝滚动,可以使用 marquee 这个简单的标签,不过这标签的最大问题就是不能首尾相连(无缝)滚动. 使用 DIV + JS 就可以轻松实现无缝滚动: 1) DIV代 ...

  8. index.html图片弹窗,原生javascript实现图片弹窗交互效果

    [一]用var 声明多个变量,比每个变量都用var快多了 var sScrollTop = document.body.scrollTop || document.documentElement.sc ...

  9. 原生Javascript实现图片轮播效果

    首先引入js运动框架 1 function getStyle(obj,name){ 2 if(obj.currentStyle){ 3 return obj.currentStyle[name]; 4 ...

最新文章

  1. 盘点丨机器学习2017年重大进展汇总
  2. 科学家们竟用乐高观察细胞,网友:万万没想到啊
  3. 我的游戏学习日志46——游戏交互设计(2)
  4. 数据中心机房空调系统的这些“套路”你知多少?
  5. 第2讲 | 网络分层的真实含义是什么?
  6. Rowkey设计_HBase表设计
  7. 倍增:喷泉 深度解析(洛谷P7167)
  8. 【Pytorch神经网络基础理论篇】 06 自动求导+导数与微分
  9. 笔记本电脑关机快捷键_2020年双十一值得入手的高性价比笔记本电脑外设推荐...
  10. Qt的信号槽机制介绍(含Qt5与Qt4的差异对比)
  11. 对话DDM:分布式数据库中间件全解析
  12. 安全服务,从“被动应对”到“主动防范”
  13. win7系统怎么用计算机,win7电脑配置怎么查看_win7系统查看电脑配置的方法
  14. 京东超市 导航条布局
  15. QT 使用QAxWidget和QAxObject操作DOCX和EXECL文件,包括修改数据、插入图片、修改表格、打印文档、复制SHEET、修改页码数等
  16. gyp ERR! stack Error: EACCES: permission denied,解决
  17. CAD2006 ----VBA(Hello World)
  18. ML-Agent——使用可执行.exe文件
  19. 【艺术字签名生成器】】试卷家长签字居然被嫌弃了|“我觉得我还能再抢救一下,你看行嘛?“
  20. 十七、DPM模型参数设置详解

热门文章

  1. 618战报的谜面,与荣耀解码的谜底
  2. 如何在Google Meet中共享屏幕
  3. Linux 网络编程 TCP
  4. Spring配置文件报错问题
  5. SSD安装ubuntu系统的优化
  6. 计算机的好处和坏处的英语作文,关于电脑利弊的英语作文
  7. 计算机知识树图片大全,基于知识树的计算机基础分级教学研究
  8. 微信8.0新版本上线,这些新功能你知道吗?
  9. 【HBU】数据结构树练习题
  10. 帆软finereport学习路线,如何拿到fcrp-D证书?