模仿轮播图

模仿轮播图中用到了排他思想,定时器和一些方法,刚开始在第一张图片和最后一张图片的衔接处处理的不好,后来解决了bug,下面的是我的代码

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            padding: 0;
            margin: 0;
            list-style: none;
        }
        .box {
            width: 400px;
            height: 300px;
            margin: 100px auto;
            position: relative;
            border: 1px solid #ccc;
        }
        a {
            display: none;
            width: 400px;
            height: 300px;
            cursor: move;
            text-align: center;
            font: 700 80px/300px "simsun";
        }
        .show {
            display: block;
        }
        ul {
            position: absolute;
            bottom: 10px;
            left: 50%;
            margin-left: -66px;
        }
        li {
            float: left;
            width: 18px;
            height: 18px;
            text-align: center;
            color: #fff;
            line-height: 18px;
            cursor: pointer;
            margin: 2px;
            border-radius: 50%;
            background: rgba(0,0,0,0.7);
        }
        .current {
            background-color: red;
        }
        span {
            position: absolute;
            top: 50%;
            text-align: center;
            font: 700 30px/60px "simsun";
            color: #fff;
            margin-top: -30px;
            width: 30px;
            cursor: pointer;
            background: rgba(0, 0, 0, 0.3);
        }
        span:hover {
            background: rgba(0, 0, 0, 0.8);
        }
        .right {
            right: 0;
        }
    </style>
</head>
<body>
    <div class="box">
        <a href="#" class="show">1</a>
        <a href="#">2</a>
        <a href="#">3</a>
        <a href="#">4</a>
        <a href="#">5</a>
        <a href="#">6</a>
        <ul>
            <li class="current">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
        </ul>
        <span class="left"><</span>
        <span class="right">></span>
    </div>

    <script>
        var box = document.getElementsByClassName("box")[0];
        var aArr = document.getElementsByTagName("a");
        var liArr = document.getElementsByTagName("li");
        var spanArr = document.getElementsByTagName("span");
        //定义一个颜色数组
        var colorArr = ["skyblue","yellow","pink","#CA66FF","green","orange"];

        //1.给每一个a链接上色;
        for(var i=0;i<aArr.length;i++){
            aArr[i].style.background = colorArr[i];
        }

        //2.下面的li标签被点击的时候,点亮的同时让a链接显示出来;
        for(var i=0;i<liArr.length;i++){
            //自定义属性,索引值
            liArr[i].index = i;
            liArr[i].onclick = function () {
                //排他思想
                for(var j=0;j<liArr.length;j++){
                    liArr[j].className = "";
                    aArr[j].className = "";
                }
                this.className = "current";
                aArr[this.index].className = "show";
            }
        }

        //3.点击右边的span,显示下一张图片;
        var count = 0;
        spanArr[1].onclick = function () {
            count++;
            if(count === 6){
                count = 0;
            }
            //排他思想
            for(var j=0;j<liArr.length;j++){
                liArr[j].className = "";
                aArr[j].className = "";
            }
            liArr[count].className = "current";
            aArr[count].className = "show";
        }

        //4.点击左边的span,显示上一张图片;
        spanArr[0].onclick = function () {
            count--;
            if(count === -1){
                count = 5;
            }
            //排他思想
            for(var j=0;j<liArr.length;j++){
                liArr[j].className = "";
                aArr[j].className = "";
            }
            liArr[count].className = "current";
            aArr[count].className = "show";
        }

        //5.加定时器;
        var timer = setInterval(spanArr[1].onclick,1000);

        //6.鼠标移上去,停止滑动,清除定时器;鼠标移开,添加定时器,开始滑动
        box.onmouseover = function () {
            clearInterval(timer);
        }
        box.onmouseout = function () {
            timer = setInterval(spanArr[1].onclick,1000);
        }
    </script>

</body>
</html>

其实这个代码还可以进行封装,减小代码量,下面的是封装以后的:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            padding: 0;
            margin: 0;
            list-style: none;
        }
        .box {
            width: 400px;
            height: 300px;
            margin: 100px auto;
            position: relative;
            border: 1px solid #ccc;
        }
        a {
            display: none;
            width: 400px;
            height: 300px;
            cursor: move;
            text-align: center;
            font: 700 80px/300px "simsun";
        }
        .show {
            display: block;
        }
        ul {
            position: absolute;
            bottom: 10px;
            left: 50%;
            margin-left: -66px;
        }
        li {
            float: left;
            width: 18px;
            height: 18px;
            text-align: center;
            color: #fff;
            line-height: 18px;
            cursor: pointer;
            margin: 2px;
            border-radius: 50%;
            background: rgba(0,0,0,0.7);
        }
        .current {
            background-color: red;
        }
        span {
            position: absolute;
            top: 50%;
            text-align: center;
            font: 700 30px/60px "simsun";
            color: #fff;
            margin-top: -30px;
            width: 30px;
            cursor: pointer;
            background: rgba(0, 0, 0, 0.3);
        }
        span:hover {
            background: rgba(0, 0, 0, 0.8);
        }
        .right {
            right: 0;
        }
    </style>
</head>
<body>

    <div class="box">
        <a href="#" class="show">1</a>
        <a href="#">2</a>
        <a href="#">3</a>
        <a href="#">4</a>
        <a href="#">5</a>
        <a href="#">6</a>
        <ul>
            <li class="current">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
        </ul>
        <span class="left"><</span>
        <span class="right">></span>
    </div>

    <script src="tool.js"></script>
    <script>
        //0.老三步;给每一个a链接上色;
        //1.下面的li标签被点击的时候,点亮的同时让a链接显示出来;
        //2.点击右边的span,显示下一张图片;
        //3.点击左边的span,显示上一张图片;
        //4.加定时器;

        var box = document.getElementsByClassName("box")[0];
        var aArr = document.getElementsByTagName("a");
        var liArr = document.getElementsByTagName("li");
        var spanArr = document.getElementsByTagName("span");
        //定义一个颜色数组
        var colorArr = ["skyblue","green","pink","yellow","blue","orange"];
        //0.老三步;给每一个a链接上色;
        for(var i=0;i<aArr.length;i++){
            aArr[i].style.background = colorArr[i];
        }

        //1.下面的li标签被点击的时候,点亮的同时让a链接显示出来;
            //排他思想,干掉所有人,剩下我自己
        for(var i=0;i<liArr.length;i++){
            liArr[i].onclick = function () {

                count = this.innerHTML-1;
                fn();
            }
        }

        //2.点击右边的span,显示下一张图片;
        var count = 0;
        spanArr[1].onclick = fn1;

        //3.点击左边的span,显示上一张图片;
        spanArr[0].onclick = fn2;

        //4.加定时器;
            //定时器的逻辑和右边的span一样
        var timer = setInterval(spanArr[1].onclick,1000);

        //5.鼠标放上去,停止滑动,清除定时器;鼠标离开,滑动开始.添加定时器
        box.onmouseover = function () {
            clearInterval(timer);
        }
        box.onmouseout = function () {
//            setInterval(timer);
            timer = setInterval(spanArr[1].onclick,1000);
        }

    </script>

</body>
</html>

封装方法的tool.js引用包:

//封装点亮盒子和显示a链接
function fn() {
    //点亮li,只需要排他思想加this,但是如果让对应的a链接显示,就要模拟tab栏,获取索引值
    //利用排他思想,点亮li
    for(var j=0;j<liArr.length;j++){
        liArr[j].className = "";
        //a标签的显示也要依靠排他思想
        aArr[j].className = "";
    }
    //剩下我自己
    liArr[count].className = "current";
    //让对应的a链接显示出来,获取索引值:this.index
    aArr[count].className = "show";
}

//封装右侧span
function fn1() {
    count++;
    //count的最大值为5,等于6的时候,显示第一个
    if(count === 6){
        count = 0;
    }
    //排他思想,干掉所有人,剩下我自己
    fn();
}

//封装左侧span
function fn2() {
    count--;
    //count的最大值为5,等于6的时候,显示第一个
    if(count === -1){
        count = 5;//索引值为5最后一张图
    }
    //排他思想,干掉所有人,剩下我自己
    fn();
}
时间: 2025-01-01 08:22:47

模仿轮播图的相关文章

模仿轮播图效果

<!doctype html><html lang="zh"><head> <meta charset="UTF-8"> <title>手写轮播图效果</title> <style> #imgsDiv{position: relative;height: 400px;} .picDiv{ position: absolute; top:0; left:0; width:100%; h

无限轮播图

思路:在ScrollView的contentSiz设置成ScrollView宽的度的三倍.创建三个循环的View.当滑动的时候,正常滑动活动结束.滑动结束设置contentOffset将视图滑动到中间去.将后面的数据赋值到中间...简单说就是视图只显示中间一张视,交换数据实现不同数据的显示.. #import <UIKit/UIKit.h> @protocol YQImageLoopDelegate <NSObject> - (void)YQImageLoopConfigDataA

第一次尝试自己写轮播图

其实嗯,对于前端我与很多很多想说的话,但是看着种种最后却不知道说什么了,既然这样那就什么都不要说 第一次尝试自己写轮播图,对于初学前端的我来说我感觉我晚了很久了 为什么要模仿写一份出来呢,我也不知道,做个纪念吧 html代码页面 7 <!DOCTYPE html> 8 <html> 9 <head> 10 <meta charset="UTF-8"> 11 <title></title> 12 <link r

viewpager实现轮播图效果

在很多app中我们都有轮播图的效果,特别是一些电商类的app,大部分都有此功能,今天就简单的模仿下,还有一个自动跳动的小功能,这个用定时器实现就行,话不多说直接上代码: import java.util.ArrayList; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import

jQuery----无缝轮播图

1.效果 2.html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" type="text/css" href="css/iconfont.css"> <link rel="stylesh

Android自己定义控件之轮播图控件

背景 近期要做一个轮播图的效果.网上看了几篇文章.基本上都能找到实现,效果还挺不错,可是在写的时候感觉每次都要单独去又一次在Activity里写一堆代码.于是自己封装了一下.这里仅仅是做了下封装成一个控件,不必每次反复写代码了. 效果图 实现分析 轮播图的功能就是实现左右滑动的广告.图片信息展示,那我们就用ViewPager来实现,由于考虑到用户体验,我们还须要在以下加一个指示器来标示滑动到了第几张轮播图.指示器我们能够用一个线性布局来依据要展示的轮播图设置显示的View,我们要做这种一个控件没

CSS-用伪类制作小箭头(轮播图的左右切换btn)

先上学习地址:http://www.htmleaf.com/Demo/201610234136.html 作者对轮播图左右按钮的处理方法一改往常,不是简单地用btn.prev+btn.next的图片代替,而是用纯css制作. 第一个是left按钮,即prev: .vmc-arrow-left:after { content: "\e079"; } 第二个是right按钮的,也就是next下一张的按钮: .vmc-arrow-right:after { content: "\e

Jquery 实现轮播图

jq 轮播图 function banner_show(){ var left_btn = $("#banner_tag_left"); //获取左侧单击按钮 var right_btn = $("#banner_tag_right"); //获取右侧点击按钮 var Owidth = $("#banner ul li").width(); //获取单个图片宽度 var Oindex = $("#banner ul li");

js实现轮播图效果(附源码)--原生js的应用

1.js实现轮播图效果 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="Author" content="奇客艺术"> <meta name="keyword" content="关键字"> <meta name=