当前位置:首页 > 日记 > 正文

JS实现无缝循环marquee滚动效果

JS实现无缝循环marquee滚动效果

无缝循环marquee滚动JS代码实现,兼容IE, FireFox, Chrome,供大家参考,具体内容如下

首先是CSS和HTML如下:

  #marquee_zxd {    border: 1px solid red;    white-space: nowrap;    overflow: hidden;    width: 500px;    padding-top: 5px;  }  #marquee_zxd img {    height: 100px;  }<!-- 横向一定要是span -->    <div id="marquee_zxd"><span>      <!-- 内嵌一个div很重要,里面的元素必须是一个整体的移动。另外横移时,必须是行级元素只占自己的空间。 -->      <div id="marquee_inner" style="position:relative; display: inline-block;">      <img src="img/duck.webp"/>      <img src="img/donkey.webp"/>      <img src="img/eggbird.webp"/>      <img src="img/elephant.webp"/>      <img src="img/butterfly.webp"/>    </div>    </span></div><script type="text/javascript" src="${cpath}/js/marquee_zxd.js"></script>

下面是JS实现marquee_zxd.js:

/**除了Chrome以外的浏览器可以通过scrollLeft属性控制滚动*/function scrolleft(obj){  var $obj = $(obj);   //到右边顶端后不会再变  //var temp = obj.scrollLeft;  //obj.scrollLeft++;  var temp = $obj.scrollLeft();  //console.log(temp);  $obj.scrollLeft(temp+1);  //当滚动条到达右边顶端时;或本身长度不够不好滚动(漫出才好滚)  //if(obj.scrollLeft == temp){  if($obj.scrollLeft() == temp){    obj.innerHTML += obj.innerHTML;    console.log('copy');  }  //当滚动条滚动了初始内容的宽度时,滚动条回到最左端,模拟循环  //if (obj.scrollLeft >= obj.firstChild.offsetWidth)  //  obj.scrollLeft = 0;  if ($obj.scrollLeft() >= obj.firstChild.offsetWidth)    $obj.scrollLeft(0);}/**除了Chrome以外的浏览器可以通过scrolleft()滚动*/function initMarquee(){  var aaa = document.getElementById('marquee_zxd');  var MyMar = setInterval(function(){    scrolleft(aaa);  }, 20);  //鼠标移上时清除定时器达到滚动停止的目的  aaa.onmouseover=function() {clearInterval(MyMar);};  //鼠标移开时重设定时器  aaa.onmouseout=function() {MyMar = setInterval(function(){    scrolleft(aaa);  }, 20);};}  /**Chrome定时器循环函数,通过relative布局的left属性控制滚动*/function scrolleftChrome($marquee_inner, inner_width){  var width = parseInt(inner_width);  var leftPx = $marquee_inner.css("left");  //兼容IE  if(leftPx == 'auto')    leftPx = 0;  //位置左移  var left = parseInt(leftPx);      left = left - 1;  //到顶归位  if(left <= -width)    left = 0;  $marquee_inner.css("left", left);  //console.log(width + ", " + left);}/**Chrome浏览器可以通过scrolleftChrome滚动*/function initMarqueeChrome() {  //局部变量不污染全局变量空间  var $marquee_inner = $('#marquee_inner');  //原内容大小  var inner_width = $marquee_inner.css('width');  //复制一份原内容  var innerHtml = $marquee_inner.html();  $marquee_inner.html(innerHtml + innerHtml);  console.log(inner_width);  //参数采用字符串形式的缺陷:参数不能被周期性改变,参数必须是全局变量  //var MyMar = setInterval("scrolleftChrome($marquee_inner, inner_width)", 5000);  var MyMar = setInterval(function(){    //参数不污染全局变量空间    scrolleftChrome($marquee_inner, inner_width);  }, 50);  var marquee_zxd = document.getElementById('marquee_zxd');  //鼠标移上时清除定时器达到滚动停止的目的  marquee_zxd.onmouseover=function() {clearInterval(MyMar);};  //鼠标移开时重设定时器  marquee_zxd.onmouseout=function() {    //参数采用字符串形式的缺陷:参数不能被周期性改变,参数必须是全局变量    //MyMar = setInterval("scrolleftChrome($marquee_inner, inner_width)", 50);    MyMar = setInterval(function(){      //参数不污染全局变量空间      scrolleftChrome($marquee_inner, inner_width);    }, 50);  };}$(function(){  var ua = window.navigator.userAgent;   var isIE = window.ActiveXObject != undefined && ua.indexOf("MSIE") != -1;   var isFirefox = ua.indexOf("Firefox") != -1;   var isChrome = ua.indexOf("Chrome") && window.chrome;   if(isChrome){    initMarqueeChrome();    console.log("isChrome: initMarqueeChrome");  }else{    initMarquee();    console.log("isChrome: initMarquee");  }});

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

相关文章

PHP依赖注入 | DI和控制反转 | IoC

PHP依赖注入 | DI和控制反转 | IoC

依赖注入,控制反转,详解,电脑软件,PHP,首先依赖注入和控制反转说的是同一个东西,是一种设计模式,这种设计模式用来减少程序间的耦合,鄙人学习了一下,看TP官网还没有相关的文章,就写下这篇拙作介绍一下这种设计模式,希望能为TP社区贡献一些力量。…

电脑虚拟内存怎么设置

电脑虚拟内存怎么设置

设置,虚拟内存,电脑软件,内存在电脑中发挥重要作用,电脑中所有运行的程序都需要内存来执行,如果执行的程序太多,就会导致内存消耗殆尽。为了解决这个问题,Windows采用虚拟内存,用一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存,虚拟内存…

MySQL分页性能探索

MySQL分页性能探索

性能,分页,电脑软件,MySQL,几种常见的分页方法: 1。这样的自动扶梯 自动扶梯的方式通常在前一页/下一页提供两种导航方式。有些产品甚至没有提供前一页的功能。它们只提供了一种更为丰富的方式,并且有更多的方法自动加载下拉列表,这可以推广…

JS使用tofixed与round处理数据四舍

JS使用tofixed与round处理数据四舍

四舍五入,数据,区别,电脑软件,JS,1 、tofixed方法  toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。例如将数据Num保留2位小数,则表示为:toFixed(Num);但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则,银行家舍入:…

基于Bootstrap模态对话框只加载一

基于Bootstrap模态对话框只加载一

模态,对话框,数据,加载,解决方法,摘要: 前端框架 Bootstrap 的模态对话框,可以使用 remote 选项指定一个 URL,这样对话框在第一次弹出的时候就会自动从这个地址加载数据到 .modal-body 中,但是它只会加载一次,不过通过在事件中调用 removeData(…

让你的IIS无懈可击

让你的IIS无懈可击

无懈可击,电脑软件,IIS,如果你的电脑新安装了NT4/Win2000以后,并不是说就可以直接用来作Internet服务器了。尽管微软的补丁打了一大堆,但还是有些漏洞。现在我们就简单的谈一下如何使用IIS建立一个高安全性能的服务器。一、 以Windows NT的安…

Yii框架连接mongodb数据库的代码

Yii框架连接mongodb数据库的代码

数据库,连接,框架,代码,电脑软件,yii2框架是yii的升级版本,本文我们分别讲解在yii框架中如何连接数据库mongodb。在文件夹common/config/main_local.php中加入如下代码:<?phpreturn ['components' => ['mongodb' => ['class' => 'yii…

浅谈oracle的SCN机制

浅谈oracle的SCN机制

机制,浅谈,电脑软件,SCN,oracle,作为oracle中的一种重要机制,SCN(系统更改号)在数据恢复、数据保护、数据流复制、RAC节点间的同步等方面起着重要的作用,了解SCN的运行机制有助于您更好地理解上述功能。 在理解SCN之前,让我们看看Oracle事务中的…

Node.js v8.0.0正式发布!看看带来了

Node.js v8.0.0正式发布!看看带来了

新特性,带来了,正式发布,电脑软件,js,前言Node.js于5月30号在其官方博客上发布了Node.js v8.0.0。这一版本将成为当前的长期维护版本,从2017年10月开始到2019年12月31号。而Node.js v6.0.0将会在2018年4月进入维护模式,并于2019年4月结束。最…

简要描述redis和MySQL之间的差异

简要描述redis和MySQL之间的差异

描述,简要,差异,电脑软件,redis,我们知道MySQL是持久存储。它存储在磁盘中。如果检索,它将涉及某些IO。为了解决这一瓶颈,缓存的出现,例如,现在最常用的缓存(MC)。首先,用户访问的MC,如果不打,去mysql,然后像内存和硬盘,拷贝数据到MC的一部分。 两redi…

H5基于iScroll实现下拉刷新和上拉

H5基于iScroll实现下拉刷新和上拉

上拉加载更多,下拉刷新,电脑软件,iScroll,前言 前一段有个手机端的项目需要用到下拉刷新和上拉加载更多的效果,脑海里第一反映就是微博那种效果,刚开始的理解有些偏差,以为下拉也是追加数据,上拉也是追加数据,后请教同事后发现其实下拉只是…

使用store来优化React组件的方法

使用store来优化React组件的方法

组件,方法,优化,电脑软件,store,?在使用 React 编写组件的时候,我们常常会碰到两个不同的组件之间需要共享状态情况,而通常的做法就是提升状态到父组件。但是这样做会有一个问题,就是尽管只有两个组件需要这个状态,但是因为把状态提到了父组件,…