无限滚动

原理:

1.给ul一个绝对定位使其脱离文档流,left设置为0,把图片塞进ul里,编写一个“移动"函数,函数功能能够使ul的left以一个正速度向右跑动,

2.设置一个定时器,让"移动"函数每30(参数可变)毫秒执行一次

3.因为ul的长度会“跑”完,此时可以使ul的content也就是img增加一倍,

oUl.innerHTML +=oUl.innerHTML;

4.此时因为ul的content增加,其width也会随着增大,根据实际项目展示图片数量可能改动或不确定性,

oUl.style.width = oLi.length*oLi[0].offsetWidth+‘px‘;

5.往“移动”函数里增添代码。

5.1此时ul向右移动,判断当ul的offsetLeft>0时,把ul向左拉“一半ul的宽度”,也就是使ul能够向右一直无限制移动

 

if(oUl.offsetLeft>0){
         oUl.style.left = -oUl.offsetWidth/2+‘px‘;
}

5.2当ul向左移动,其offsetLeft跑了ul一半的宽度时,把整个ul拉回至初始的left:0;

if (oUl.offsetLeft<-oUl.offsetWidth/2) {
            oUl.style.left = 0;
}

上代码:

html:

 <div id="box">
        <ul>
            <li><a href="#"><img src="1.jpg" /></a></li>
            <li><a href="#"><img src="2.jpg" /></a></li>
            <li><a href="#"><img src="3.jpg" /></a></li>
            <li><a href="#"><img src="4.jpg" /></a></li>
        </ul>
 </div>

css:

     * {margin: 0;padding: 0;}
     #box{ width: 480px; height: 110px; border: 1px red solid; margin: 100px auto;overflow: hidden; position: relative; }
     #box ul{ position: absolute; left: 0; top: 5px;}
     #box ul li{list-style: none; float: left; width: 100px; height: 100px; padding-left: 16px; }
     #box ul li img{width: 100px; height: 100px;}

js:

<script>
                  window.onload = function(){
                          var oDiv = document.getElementById(‘div1‘);
                          var oUl = oDiv.getElementsByTagName(‘ul‘)[0];
                          var oLi = oUl.getElementsByTagName(‘li‘);
                          var aA = document.getElementsByTagName(‘a‘);
                          var iSpeed = 10;            //让ul开始就具有一个速度走动    

                           oUl.innerHTML +=oUl.innerHTML;
                           oUl.style.width = oLi.length*oLi[0].offsetWidth+‘px‘;
                                aA[0].onclick = function(){
                                            iSpeed = -10;
                              };
                               aA[1].onclick = function(){
                                            iSpeed = 10;
                              };

                              function fnMove(){
                                      if (oUl.offsetLeft<-oUl.offsetWidth/2) {     //负数是因为ul的left是负数                                                    oUl.style.left = 0;
                                             }

                                     else if(oUl.offsetLeft>0){                                                 oUl.style.left = -oUl.offsetWidth/2+‘px‘;
                                            }                                

                                         oUl.style.left = oUl.offsetLeft+iSpeed+‘px‘;        //整个ul向右移动            

                              };

                                  var timer = null;
                                  clearInterval(timer);
                                  timer = setInterval(fnMove,30);

                                  oUl.onmouseover = function(){
                                       clearInterval(timer);
                                  };
                                  oUl.onmouseout = function(){
                                       timer = setInterval(fnMove,30);  //当鼠标移开的时候执行这个定时器

                                  };

                  };
           </script>
时间: 2024-11-03 22:30:23

无限滚动的相关文章

LoopBar: Tap酒吧与无限滚动

相约工具栏 - 标签栏与无限滚动为Android由Cleveroad 在Cleveroad我们最近认识到通过使用任何一个应用程序类别的导航,导航面板是很无聊和琐碎.这就是为什么我们的设计师的创意武装,我们向您介绍了基于Android的应用,我们的新组件 - LoopBar.当时的想法是让导航菜单就在指纹,在标签栏.更重要的是认为有一些特定的功能,使其从类似的人群中脱颖而出.因此,尝试在你的应用程序的LoopBar库,你会看到其中的差别. 如果你努力创造不寻常的外观和导航的应用程序,欢迎你使用循环

利用递归 实现UIScrollView无限滚动的效果

项目需求 利用递归 实现UIScrollView无限滚动的效果. 上机试题, #import "ViewController.h" @interface ViewController (){ UIScrollView *mainScroll; BOOL isFinish; int x; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; x=0; isFinish = YES;

用原生的javascript 实现一个无限滚动的轮播图

说一下思路:和我上一篇博客中用JQ去写的轮播图有相同点和不同点 相同点: 首先页面布局是一样的 同样是改变.inner盒子的位置去显示不同的图片 不同点: 为了实现无限滚动需要多添加两张重复的图片 左右切换和前面的方法有所不同,前面是获取当前的索引值乘以-600px当做位移距离,现在是需要获取当前.inner的位置来加上或者减去-600来实现 下面来一步步的去实现轮播图: 首先是html <!DOCTYPE html> <html lang="en"> <

Android 高级UI设计笔记09:Android如何实现无限滚动列表

ListView和GridView已经成为原生的Android应用实现中两个最流行的设计模式.目前,这些模式被大量的开发者使用,主要是因为他们是简单而直接的实现,同时他们提供了一个良好,整洁的用户体验. 对于ListView和GridView一个共同基本要求是:当用户向下滚动时可以动态加载数据支持无限滚动.下面教你如何在自己的应用中实现这个特性. 具体流程如下: (1)我们需要的一个主要组件是InfiniteScrollListener类,它实现了OnScrollListener接口.让我们直接

基于HTML5+CSS3的图片旋转、无限滚动、文字跳动特效

本文分享几种基于HTML5+CSS3实现的一些动画特效:图片旋转.无限滚动.文字跳动;实现起来均比较容易,动手来试试! 一.图片旋转 效果图如下: 这个效果实现起来其实并不困难.代码清单如下: <style type="text/css"> #liu{ width:280px; height: 279px; background: url(shishi.png) no-repeat; border-radius:140px; -webkit-animation:run 6s

Cocos2d-x 《雷电大战》-双层地图无限滚动

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文要实现飞机射击游戏中的地图无限滚动的功能,这里分为两个层,一个层无限向下滚动,一个层无限向上滚动,这样子结合起来效果就非常有层次感,也非常逼真,这里我把地图层都写成一个类,自己把地图改下,就可以成为你自己的了!下面,我们开始吧 先来看看效果: Cocos2d-x版本:3.4 工程环境:VS30213 一.实现思路 其实就是两张图片,然后同时一起向下(向上)滚动,当一张图片完全出视野后,就

masonry结合json 制作无限滚动的瀑布流

做前端这行的 能直接贴代码就直接贴代码了,不用多说什么别的 效果需要引入jquery和jquery.masonry.min.js这两个JS JS代码如下: $(document).ready(function(){ var $container = $('.space_main_con1 .con'); var animated; var i=1; //判断是否需要 masonry.js这个里面提供动画 如果是IE浏览器并且版本低于9.0 则添加动画 否则就用 css3的动画(css3的动画代码

ios开发——实用技术篇&amp;图片无限滚动和自动滚动

初始化项目 1:自定义一个集成自Collection的Cell .h 1 #import <UIKit/UIKit.h> 2 @class iCocosNews; 3 @interface iCocosNewsCell : UICollectionViewCell 4 @property (nonatomic, strong) iCocosNews *news; 5 @end .m 1 #import "iCocosNewsCell.h" 2 #import "i

Cocos2d-x《雷电大战》-双层地图无限滚动

本文要实现飞机射击游戏中的地图无限滚动的功能,这里分为两个层,一个层无限向下滚动,一个层无限向上滚动,这样子结合起来效果就非常有层次感,也非常逼真,这里我把地图层都写成一个类,自己把地图改下,就可以成为你自己的了!下面,我们开始吧 先来看看效果: Cocos2d-x版本:3.4 工程环境:VS30213 一.实现思路 其实就是两张图片,然后同时一起向下(向上)滚动,当一张图片完全出视野后,就把它调到最上面.形成两个图片交替出现,不过,一般为游戏中我们都感觉像是一张图片,那是因为两张图片的头尾连接

iOScollectionView广告无限滚动(Swift实现)

今天公司里的实习生跑过来问我一般App上广告的无限滚动是怎么实现的,刚好很久没写博客了,就决定写下了,尽量帮助那些处于刚学iOS的程序猿. 做一个小demo,大概实现效果如下图所示: 基本实现思路: 1. 在你需要放置无限滚动展示数据的地方把他的数据,在原本的基础上把你要展示的数据扩大三倍.(当然扩大两倍也是可以的,三倍的话,比较好演示) // MARK: - 设置数据源 func collectionView(_ collectionView: UICollectionView, number