使用数组方法使得图文顺序倒序随机切换

使用数组方法使得图文顺序倒序随机切换

实现功能描述:从小到大 和从大到小是同一个按钮,切换图片和文字;随机排序是另一个按钮,可以随机切换图文。
第一种方法:使用了数组的sort函数排序,随机数用的是Math.random() -0.5;
第二种方法:使用了数组的reverse函数翻转,随机数用的是Math.floor(Math.random() * arr.length);
拿去使用的时候别忘了改图片地址哈

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .big {
            width: 800px;
            height: 500px;
            border: 1px solid red;
            margin: 30px auto;
            text-align: center;
        }

        button {
            margin: 17px auto;
            width: 70px;
            height: 25px;
            background-color: red;
            color: white;
            border: none;
        }

        .wrap {
            width: 800px;
            height: 440px;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
        }

        img {
            width: 200px;
            display: block;
        }
    </style>
</head>

<body>
    <div class="big">
        <button>从大到小</button>
        <button>随机排序</button>
        <div class="wrap">
            <div class="box">
                <img src="../pic/1.jpg" alt="">
                <p>美女1</p>
            </div>
            <div class="box">

                <img src="../pic/2.jpg" alt="">
                <p>美女2</p>
            </div>
            <div class="box">

                <img src="../pic/3.jpg" alt="">
                <p>美女3</p>
            </div>
            <div class="box">

                <img src="../pic/4.jpg" alt="">
                <p>美女4</p>
            </div>
            <div class="box">

                <img src="../pic/5.jpg" alt="">
                <p>美女5</p>
            </div>
            <div class="box">

                <img src="../pic/6.jpg" alt="">
                <p>美女6</p>
            </div>
            <div class="box">

                <img src="../pic/7.jpg" alt="">
                <p>美女7</p>
            </div>
            <div class="box">

                <img src="../pic/8.jpg" alt="">
                <p>美女8</p>
            </div>
        </div>
    </div>
    <script>
    //点击随机排序,图片文字随机排序
        var btn = document.getElementsByTagName('button');
        var p = document.getElementsByTagName('p');
        var img = document.getElementsByTagName('img');
        var num = [0, 1, 2, 3, 4, 5, 6, 7];//存储图片的对应下标,以便下面翻转使用
        var arr = [{
            'img': '../pic/1.jpg',
            'name': '美女1'
        }, {
            'img': '../pic/2.jpg',
            'name': '美女2'
        }, {
            'img': '../pic/3.jpg',
            'name': '美女3'
        }, {
            'img': '../pic/4.jpg',
            'name': '美女4'
        }, {
            'img': '../pic/5.jpg',
            'name': '美女5'
        }, {
            'img': '../pic/6.jpg',
            'name': '美女6'
        }, {
            'img': '../pic/7.jpg',
            'name': '美女7'
        }, {
            'img': '../pic/8.jpg',
            'name': '美女8'
        }];
        
       
        // 顺序和倒序切换
        btn[0].flag = 1;//1表示排序是从大到小的排序
        btn[0].onclick = function () {
            if (this.flag == 0) {
            //正序
               num.sort(function (a, b) {
                    return a - b;
                })
                correspond();
                this.innerText = '从大到小';
                this.flag = 1;
            }else {
               //倒序
                num.sort(function (a, b) {
                    return b - a;
                })
                correspond();
                this.innerText = "从小到大";
                this.flag = 0;

            }
        }
        //对应接收
        function correspond() {
            for (var i = 0; i < box.length; i++) {
                // 用num可以在点击事件中 同步 切换 图片和文字
                img[i].src = arr[num[i]].img;
                p[i].innerText = arr[num[i]].name;
            }
        }
        
         //随机排序  Math.random() -0.5  网上有说他不是真正意义上的随机
         //但是我们得知道:js中无法拿到真正无规律的数字,所有随机数都由浏览器的方法直接返回的,在使用中不存在真假的问题,只是有概率问题;所以任何一种能拿到随机数的方法都可以用   
        btn[1].onclick = function () {
            num.sort(function (a, b) {
                return Math.random() -0.5;
            })
            correspond();
        }
    </script>

</body>

</html>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        body {
            text-align: center;
        }

        p {
            margin-top: 30px;
            color: #fff;
        }

        p button {
            width: 80px;
            height: 35px;
            background-color: red;
        }

        div {
            width: 800px;
            height: 450px;
            margin: 15px auto;
        }

        img {
            width: 200px;
            height: 200px;
            background-color: burlywood;
        }

        li {
            list-style: none;
        }

        div ul {
            display: flex;
            flex-wrap: wrap;
        }
    </style>
</head>

<body>
    <!-- CSS基本样式 -->
    <p>
        <button>从大到小</button>
        <button>随机排序</button>
    </p>
    <div>
        <ul>
            <li>
                <img src="./img/1.jpg" alt=""><br>
                <span>美女1 </span>
            </li>
            <li>
                <img src="./img/2.jpg" alt=""><br>
                <span>美女2</span>
            </li>
            <li>
                <img src="./img/3.jpg" alt=""><br>
                <span>美女3 </span>
            </li>
            <li>
                <img src="./img/4.jpg" alt=""><br>
                <span>美女4 </span>
            </li>
            <li>
                <img src="./img/1.jpg" alt=""><br>
                <span>美女5 </span>
            </li>
            <li>
                <img src="./img/2.jpg" alt=""><br>
                <span>美女6</span>
            </li>
            <li>
                <img src="./img/3.jpg" alt=""><br>
                <span>美女7 </span>
            </li>
            <li>
                <img src="./img/4.jpg" alt=""><br>
                <span>美女8 </span>
            </li>
        </ul>
    </div>
    <!-- JS部分 -->
    <script>
        // 从大到小按钮操作
        // 1. 当按钮内容是从大到小时, 点击按钮,将图片按照从大到小的顺序排列
        // 2. 当按钮内容是从小到大时, 点击按钮, 将图片从小到大排列
        // 存数据 一一对应的数据用对象存储
        var arr = [{
            'img': './img/1.jpg',
            'name': '美女1'
        }, {
            'img': './img/2.jpg',
            'name': '美女2'
        }, {
            'img': './img/3.jpg',
            'name': '美女3'
        }, {
            'img': './img/4.jpg',
            'name': '美女4'
        }, {
            'img': './img/1.jpg',
            'name': '美女5'
        }, {
            'img': './img/2.jpg',
            'name': '美女6'
        }, {
            'img': './img/3.jpg',
            'name': '美女7'
        }, {
            'img': './img/4.jpg',
            'name': '美女8'
        }];

        console.log(arr);
        var indexArr = [0, 1, 2, 3, 4, 5, 6, 7];

        // 获取元素 btn img span
        var btn = document.getElementsByTagName('button');
        var img = document.getElementsByTagName('img');
        var span = document.getElementsByTagName('span');
        console.log(btn, img, span);

        // 点击事件
        btn[0].onclick = function () {
            indexArr.reverse();
            for (var i = 0; i < img.length; i++) {
                img[i].src = arr[indexArr[i]].img;
                span[i].innerText = arr[indexArr[i]].name;
            }
            if (this.innerText == '从大到小') {
                this.innerText = '从小到大';
            } else {
                this.innerText = '从大到小';
            }
        }

        btn[1].onclick = function(){
            // 存储每次点击生成的随机下标
            var newArr = [];
            for(var i = 0; i < arr.length; i++){
            //因为可能随机出现7.xx或者其他带小数的数字,所以需要向下取整
                var num = Math.floor(Math.random() * arr.length);
                //以防止出现同样的随机数,导致所有图文不能随机
                if(newArr.indexOf(num) == -1){
                    newArr.push(num);
                } else {
                    i--;
                }
            }
            console.log(newArr);
            for (var i = 0; i < img.length; i++) {
                img[i].src = arr[newArr[i]].img;
                span[i].innerText = arr[newArr[i]].name;
            }
        }
    </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值