日期:2014-05-16  浏览次数:20440 次

JavaScript 之 图片滚动实例分析

简单案例学习,高手大神请绕行。

最近在学习HTML/CSS的过程中,遇到一个例子,就是简单的图片滚动案例,觉得挺有趣也很实用,就把网友的源码分析了一下,本身就很简单,所以高手大神请绕行。

案例的效果如下图所示:


这个案例的原理很简单,主要用到了scrollLeft和float。先要通过CSS将图片摆放到一个div中而且要摆成一行。然后通过JavaScript动态设置div容器的scrollLeft的值,一直累加,就会出现图片往左移动的效果,最终也就是出现图片滚动了。但是要注意当图片滚动到最后一张图片的时候,会导致右侧空白了,这就需要两个图片集,第二个图片集来补充这些空白,在第一个图片集全部通过后,通过设置scrollLeft值为零,在切换回第一个图片集。

完整代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>
            横向滚动
        </title>
        <style type="text/css">
            body{margin:0 auto; width:900px; padding:0; margin-top:40px;} 
            #demo{
            	border:1px dashed #FF0000; 
            	width:500px; 
            	padding:5px; 
            	overflow:hidden;/*溢出的元素隐藏*/
            	margin:0 auto;
            }
            #demo img{ border:none;} 
            #indemo{
            	float:left; 
            	width:500%; /*使所有图片可以横向摆放在一行中,不会换行,500%是经过图片大小和数量计算得出的*/
            } 
            #demo1{ float:left;}
            #demo2{ float:left;}
        </style>
    </head>
    
    <body>
        <div id="demo">
            <div id="indemo">
                <div id="demo1">
                    <a href="#">
                        <img src="images/biguiy1.jpg" />
                    </a>
                    <a href="#">
                        <img src="images/fengshang1.jpg" />
                    </a>
                    <a href="#">
                        <img src="images/jian1.jpg" />
                    </a>
                    <a href="#">
                        <img src="images/meijiang1.jpg" />
                    </a>
                    <a href="#">
                        <img src="images/wukuang1.jpg" />
                    </a>
                    <a href="#">
                        <img src="images/xinduhui1.jpg" />
                    </a>
                </div>
                <div id="demo2">
                </div>
            </div>
        </div>
        <script type="text/javascript">
            var speed = 10; //设置速度
            var tab = document.getElementById("demo");
            var tab1 = document.getElementById("demo1");
            var tab2 = document.getElementById("demo2");
            tab2.innerHTML = tab1.innerHTML; //将tab1的代码赋值给tab2,tab2是用来补充tab1中最后一张图片后面的空白的。
            /**
            默认tab.scrollLeft = 0;
            tab2.offsetWidth=  988px;
            所以当tab.scrollLeft累加到988时,自动减为0,重新从1开始加起。
            */
            function Marqueen() {
                if (tab2.offsetWidth - tab.scrollLeft <= 0) //scrollLeft累加,会使滚动条向右移动。
                	tab.scrollLeft -= tab1.offsetWidth;//减为0
                else {
                    tab.scrollLeft++; 
                }
            }
           
            var mymar = setInterval(Marqueen, speed);//按照一定的速度调用Marqueen函数

            tab.onmouseover = function() {
                clearInterval(mymar);//鼠标经过时,取消由 setInterval() 设置的 timeout,停止调用Marqueen
            };
            tab.onmouseout = function() {
                mymar = setInterval(Marqueen, speed);//鼠标离开后,重新调用Marqueen