使用数组方法使得图文顺序倒序随机切换
实现功能描述:从小到大 和从大到小是同一个按钮,切换图片和文字;随机排序是另一个按钮,可以随机切换图文。
第一种方法:使用了数组的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>