全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JavaScript实现图片无缝滚动效果

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

原理

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

设定一个可视区域,超过可视区域的部分隐藏,这里是将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部分是一样的,就表现的部分是一样的,即

 <!DOCTYPE html>
  <html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>无缝滚动</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
  <nav>
    <ul id="img">
      <li><img src="../images/img1.jpg" alt="img1"></li>
      <li><img src="../images/img2.jpg" alt="img2"></li>
      <li><img src="../images/img3.jpg" alt="img3"></li>
      <li><img src="../images/img4.jpg" alt="img4"></li>
      <li><img src="../images/img5.jpg" alt="img5"></li>
      <li><img src="../images/img1.jpg" alt="img1"></li>
    </ul>
  </nav>
  <script type="text/javascript" src="script.js"></script>
  </body>
  </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.onmouseover=function(){
    clearInterval(timer);
  };
  nav.onmouseout=function () {
    timer=setInterval(scroll,10);//必须得对timer重新赋值
  }

点击向下无缝滚动
点击向左无缝滚动
点击向右无缝滚动

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


# js  # 无缝滚动  # 基于javascript的无缝滚动动画1  # javascript单张多张图无缝滚动实例代码  # JS实现单张或多张图片持续无缝滚动的示例代码  # 纯js实现无缝滚动功能代码实例  # JavaScript基于面向对象实现的无缝滚动轮播示例  # 原生JavaScript实现的无缝滚动功能详解  # js实现无缝滚动双图切换效果  # js图片无缝滚动插件使用详解  # JS实现简单的文字无缝上下滚动功能示例  # js实现文字列表无缝滚动效果  # js轮播图无缝滚动效果  # 基于javascript的无缝滚动动画实现2  # 的是  # 几张  # 会有  # 是因为  # 是指  # 为例  # 是一样的  # 就行  # 两张  # 往下  # 则会  # 需要注意  # 跳过  # 则需  # 几个  # 在这  # 这就是  # 形成了  # 很简单  # 几点 


相关文章: 如何在万网主机上快速搭建网站?  如何在Windows服务器上快速搭建网站?  高端网站建设与定制开发一站式解决方案 中企动力  零基础网站服务器架设实战:轻量应用与域名解析配置指南  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  如何通过虚拟机搭建网站?详细步骤解析  已有域名如何快速搭建专属网站?  如何快速查询域名建站关键信息?  定制建站价位费用解析与套餐推荐全攻略  青浦网站制作公司有哪些,苹果官网发货地是哪里?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  网站代码制作软件有哪些,如何生成自己网站的代码?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  ui设计制作网站有哪些,手机UI设计网址吗?  建站168自助建站系统:快速模板定制与SEO优化指南  如何通过山东自助建站平台快速注册域名?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  ,购物网站怎么盈利呢?  如何快速登录WAP自助建站平台?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  自助网站制作软件,个人如何自助建网站?  建站主机服务器选购指南:轻量应用与VPS配置解析  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  如何通过NAT技术实现内网高效建站?  网站企业制作流程,用什么语言做企业网站比较好?  网站制作新手教程,新手建设一个网站需要注意些什么?  已有域名和空间,如何快速搭建网站?  建站主机选购指南与交易推荐:核心配置解析  七夕网站制作视频,七夕大促活动怎么报名?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何规划企业建站流程的关键步骤?  建站之星如何快速生成多端适配网站?  济南专业网站制作公司,济南信息工程学校怎么样?  如何快速搭建个人网站并优化SEO?  简历在线制作网站免费版,如何创建个人简历?  重庆市网站制作公司,重庆招聘网站哪个好?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何在搬瓦工VPS快速搭建网站?  建站VPS选购需注意哪些关键参数?  如何彻底删除建站之星生成的Banner?  模具网站制作流程,如何找模具客户?  独立制作一个网站多少钱,建立网站需要花多少钱?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  网站制作需要会哪些技术,建立一个网站要花费多少?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。