`

中秋节模仿淘宝中央焦点广告图垂直水平滑动效果

阅读更多
花了几个小时的时间,终于实现了类似淘宝主页上的中央焦点广告图的动态的水平与垂直的滑动效果,个人感觉实现出的效果还不错,挺有成就感的,后面有附件,解压后可直接运行,以下是所有html及js代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }

        body {
            text-align: center;
        }

        img {
            border: none;
            float: left;
        }

        div.main {
            position: relative;
            width: 490px;
            height: 170px;
            margin: 100px auto;
        }

        div.box {
            width: 490px;
            height: 170px;
            margin: 100px auto;
            overflow: hidden;
        }

        ul.images {
            list-style: none;
            /*width: 2450px;*/
        }

        ul.images li {
            float: left;
        }

        ul.adNav {
            list-style: none;
            position: absolute;
            bottom: 5px;
            right: 5px;
            z-index: 10;
        }

        ul.adNav li {
            font: normal 13px 'arial';
            /*font-family: arial,serif;*/
            float: left;
            width: 20px;
            height: 20px;
            line-height: 20px;
            text-align: center;
            color: #DE7D4B;
            background-color: white;
            opacity: .7;
            margin-left: 3px;
            cursor: pointer;
            -webkit-border-radius: 20px;
            -moz-border-radius: 20px;
            border-radius: 20px;
        }

        ul.adNav li.active {
            font-weight: bolder;
            background-color: #F60;
            color: white;
            opacity: 1;
        }
    </style>
</head>
<body>
<div id="main" class="main">
    <div id="box" class="box">
        <ul id="images" class="images">
            <li>
                <a href="#">
                    <img src="images/ad1.png" alt="">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/ad2.gif" alt="">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/ad3.jpg" alt="">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/ad4.jpg" alt="">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/ad5.png" alt="">
                </a>
            </li>
        </ul>
        <ul id="adNav" class="adNav">
            <li class="active">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ul>
    </div>
</div>

<div id="main1" class="main">
    <div id="box1" class="box">
        <ul id="images1" class="images">
            <li>
                <a href="#">
                    <img src="images/ad6.jpg" alt="">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/ad7.jpg" alt="">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/ad8.jpg" alt="">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/ad9.jpg" alt="">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/ad10.png" alt="">
                </a>
            </li>
        </ul>
        <ul id="adNav1" class="adNav">
            <li class="active">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ul>
    </div>
</div>

<script type="text/javascript">
    window.onload = function() {
        var $ = function() {
            return document.getElementById.call(document, arguments[0])
        };

        function Scroller() {
            this.init.apply(this, arguments);
            this.intervalShow();
        }

        Scroller.prototype = {
            init: function(shell, box, imageUl, navUl, visibleSize, time, direction, picWidth, picHeight) {
                var imageList = imageUl.getElementsByTagName('li');
                var navList = navUl.getElementsByTagName('li');
                if (imageList.length !== navList.length) {
                    throw new Error('图片数必须与导航条的数目相同');
                }
                this.shell = shell;
                this.box = box;
                this.imageList = imageList;
                this.navList = navList;
                this.size = imageList.length;//图片数目

                this.currentIndex = 0;//当前正在显示的图片索引
                this.visibleSize = visibleSize || 170;//一个图片的宽或高
                this.time = time || 500;//滑动一个图片所用时间
                this.sliding = false;//是否处于滑动状态
                this.timeout = null;//超时句柄
                this.direction = direction || 'vertical';

                this.shell.style.cssText += ';position:relative;height:' + picHeight + 'px;width:' + picWidth + 'px;';
                this.box.style.cssText += ';overflow:hidden;height:' + picHeight + 'px;width:' + picWidth + 'px;';

                if (this.direction === 'vertical') {//垂直滑动
                    imageUl.style.cssText += ';width:' + picWidth + 'px;height:' + this.size * picHeight + 'px;';
                    this.direction = 'scrollTop';
                } else {//水平滑动
                    imageUl.style.cssText += ';width:' + picWidth * this.size + 'px;height:' + picHeight + 'px;';
                    this.direction = 'scrollLeft';
                }

                //为每个导航li注册mouseover与click事件
                for (var i = 0, len = this.navList.length; i < len; i++) {
                    var navLi = this.navList[i];
                    var that = this;//为了在闭包中使用当前对象
                    navLi.onmouseover = navLi.onclick = (function(index) {
                        return function(e) {
                            if (that.sliding) {//如果还有处于滑动状态中的li,则清理timeout并将位置设置到先前最终应该到达的位置,为了防止出现频繁闪烁的现象
                                clearTimeout(that.timeout);
                                that.box.scrollTop = that.currentIndex * that.visibleSize;
                            }
                            e = e || window.event;
                            var target = e.target || e.srcElement;

                            that.slide.call(that, target, index);//在闭包内调用slide函数
                        }
                    })(i);
                }
            },
            slide:function(target, index) {
                if (Array.prototype.indexOf.call(this.navList, target) === this.currentIndex)
                    return;

                var finalScrollPosition = index * this.visibleSize;//最终要定位到的位置
                var currentScrollPosition = this.currentIndex * this.visibleSize;//当前位置

                for (var j = 0,len = this.navList.length; j < len; j++) {//清除每个导航Li的样式
                    var li = this.navList[j];
                    li.className = '';
                }

                target.className = 'active';//设置当前li为激活状态

                var moveSize = finalScrollPosition - currentScrollPosition;//本次要移动的长度
                var begin = new Date().getTime();

                this.currentIndex = index;
                var that = this;

                function animate() {//动画显示,用正统函数模拟动画效果
                    this.sliding = true;//处于滑动状态
                    var now = new Date().getTime();
                    var elapsed = now - begin;

                    if (elapsed >= this.time) {
                        this.box[this.direction] = finalScrollPosition;
                        this.sliding = false;//滑动结束
                        return;
                    }

                    var distance = currentScrollPosition + moveSize * Math.sin(Math.PI * 0.5 * (elapsed / this.time));
                    this.box[this.direction] = distance;
                    this.timeout = setTimeout(function() {
                        animate.call(that);//再次调用
                    }, Math.min(25, this.time - elapsed));
                }

                this.timeout = setTimeout(function() {
                    animate.call(that);//开始动画
                }, 25);
            },
            intervalShow:function() {//间隔显示
                var that = this;
                setTimeout(function() {
                    var index = (that.currentIndex + 1) % that.navList.length;
                    that.slide(that.navList[index], index);
                    setTimeout(arguments.callee, 3000);//每隔3秒自动显示一次
                }, 3000);
            }
        };

        new Scroller($('main'), $('box'), $('images'), $('adNav'), 490, 500, 'horizontal', 490, 170);//水平滑动
        new Scroller($('main1'), $('box1'), $('images1'), $('adNav1'), 170, 500, 'vertical', 490, 170);//垂直滑动
    }
</script>
</body>
</html>
分享到:
评论

相关推荐

    国庆中秋节排班表模板.xlsx

    国庆中秋节排班表,国庆中秋节排班表,国庆中秋节排班表,国庆中秋节排班表,国庆中秋节排班表,国庆中秋节排班表,国庆中秋节排班表,国庆中秋节排班表,国庆中秋节排班表,国庆中秋节排班表,国庆中秋节排班表,...

    中秋节模板HTML

    例如,JS可以用来制作动画效果,如月亮的升起、灯笼的闪烁、月饼的滑动展示等,增加用户体验。JS文件通常以`.js`结尾,如`script.js`。此外,模板可能还包含了jQuery或其他库,以简化JavaScript编程。 图片和图标也...

    中秋节.docx(WORD中秋节快乐英文)

    中秋节.docx(WORD中秋节快乐英文)中秋节.docx(WORD中秋节快乐英文)中秋节.docx(WORD中秋节快乐英文)中秋节.docx(WORD中秋节快乐英文)中秋节.docx(WORD中秋节快乐英文)中秋节.docx(WORD中秋节快乐英文)...

    中秋节2个模板 花好月圆 中秋节快乐(PS设计师素材 、PSD源文件下载、各图层透明图png).zip

    标题中的“中秋节2个模板 花好月圆 中秋节快乐”表明这是一个与中秋节相关的设计资源包,其中包含了两个不同的设计模板。关键词“PS设计师素材”、“PSD源文件下载”以及“各图层透明图png”揭示了这个压缩包的内容...

    淘宝中秋节月饼主图直通车宝贝详情素材下载.zip

    "淘宝中秋节月饼主图直通车宝贝详情素材下载.zip" 这个压缩包文件显然包含了一系列专门为中秋节月饼销售设计的图形素材,用于优化商品页面,提升点击率和转化率。 首先,我们要了解“主图”在电商中的重要性。主图...

    传统中秋节矢量图(ai)

    "传统中秋节矢量图"这个资源集合,显然与中国的传统节日——中秋节有关,并且是设计师们进行创作时可以使用的素材。让我们深入了解一下矢量图、中秋节主题的设计元素以及它们在设计中的应用。 矢量图是由点、线、...

    中秋节主题html网页.docx

    中秋节主题资源主要包括HTML代码、CSS样式以及相关的图片、文本等资源,用于创建与中秋节相关的网页。以下是一些中秋节HTML主题资源的概述和示例: 一、HTML代码结构 HTML代码是构建网页的基础,对于中秋节主题网页...

    Discuz! 中秋节

    7. **交互元素**:为了增加用户参与度,模板可能包含互动元素,如动态效果、节日祝福插件、活动模块等,鼓励用户分享中秋故事、参与论坛活动,增进社区凝聚力。 8. **兼容性**:"Discuz! 中秋节"模板应与多个Discuz...

    关于中秋节的思想汇报.doc

    4. 改革开放的影响:随着国家的改革开放,人民生活水平提高,中秋节的庆祝方式也发生了变化。从繁忙的秋收到轻松的团圆饭,月饼种类增多,家庭聚会更加欢乐,这体现了经济发展对人们生活品质的提升。 5. 亲情与怀念...

    Scratch少儿编程项目作品图片素材-中秋节.zip

    这个压缩包“Scratch少儿编程项目作品图片素材-中秋节.zip”显然是为了帮助孩子们在中秋节期间创建有趣的编程项目。以下是一些相关知识点的详细说明: 1. **Scratch编程语言**:Scratch采用积木块式的编程界面,让...

    用Visual C++写的中秋节祝福程序

    《Visual C++与MFC构建中秋节祝福程序》 在信息技术领域,编程语言是创造各种应用程序的基础,而Visual C++作为Microsoft公司推出的C++集成开发环境,因其强大的功能和易用性,深受程序员喜爱。本篇将详细介绍如何...

    中秋节淘宝详情页PSD模板

    中秋节淘宝详情页模板适用于中秋节淘宝详情页设计。

    手绘赏月主题中秋节PPT模板.zip

    这是一套手绘赏月主题中秋节PPT模板,共11张。 幻灯片模板封面,使用了手绘的形式,绘制了一个紫砂壶、一盘月饼、一束束菊花作为背景图片。中秋共赏一轮明月,一行艺术字放在中间。 PPT模板内容页面,同样使用了...

    优秀的动态卷轴动画中秋节PowerPoint模板.rar

    这是一份非常精美非常好看的中秋节幻灯片模板,第一PPT模板网在这里祝各位...关键词:优秀PPT模板,好看的中秋节幻灯片模板下载,精美动态PPT动画,卷轴,月亮,月饼PowerPoint背景图片,幻灯片背景音乐,.PPT格式;

    情满中秋2015中秋节ppt模板.rar

    标题中的“情满中秋2015中秋节ppt模板.rar”表明这是一个关于2015年中秋节的PowerPoint演示文稿模板文件,以“情满中秋”为主题,可能包含丰富的中秋元素,适合用于节日庆祝活动、文化展示或者企业宣传等场景。...

    关于中秋节的PPT下载.rar

    关于中秋节的PPT下载,关键词:团圆节幻灯片模板,蓝色PPT背景; 中秋起源 中秋节是远古天象崇拜的象征- -敬月习俗的遗痕.周代已有“中秋夜迎寒”,“中秋夜献裘”,“秋夜夕月”的活动;汉代,又在中秋和立秋...

    中秋节贺卡PNG

    在设计中秋节贺卡时,PNG格式能确保图像质量和细节不失真,同时允许设计师创建具有半透明效果的元素,如月亮、灯笼、兔子等中秋元素,使贺卡更具艺术感和节日氛围。 【描述】"中秋节贺卡PNG"的描述简洁明了,暗示了...

    庆祝中秋节程序 v1.0

    【庆祝中秋节程序 v1.0】是一个典型的网页应用程序,它可能是用ASP(Active Server Pages)开发的,一种在服务器端运行的脚本语言,常用于创建动态网站。这个程序可能是为了庆祝中国传统节日中秋节而设计的,它可能...

    班级中秋节活动方案.docx

    【班级中秋节活动方案】 本次班级中秋节活动旨在让学生深入了解中秋节的文化内涵,提高他们的社会实践能力,同时增强团队合作意识和感恩之情。活动围绕三个主要目标展开: 1. 了解中秋节的起源和习俗:活动鼓励...

Global site tag (gtag.js) - Google Analytics