轮播图,xhr
发布于:2022-04-14 13:39:13
次阅读
标悬停时自动停止播放, 离开时又自动播放

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>轮播图</title></head><style> .slider { width: 500px; margin: auto; padding: 0 10px; margin-top:20px; } .slider .imgs { /* 图片容器必须要有高度,否则下面图片不能正常显示 */ height: 300px; } .slider .imgs img { /* 图片完全充满父级空间显示 */ height: 100%; width: 100%; /* 默认图片全部隐藏,只有有active的图片才显示 */ display: none; } .slider .imgs img:hover { cursor: pointer; } /* 默认显示第一张 */ .slider .imgs img.active { display: block; } /* 轮播图按钮组 */ .slider .btns { /* 按钮水平一排显示,用flex,且水平居中 */ display: flex; place-content: center; } .slider .btns span { /* 按钮宽高相同,确定显示成一个正圆 */ width: 8px; height: 8px; /* 加上红色背景和数字是为了布局时可以看到,一会更去掉 */ background-color: rgba(255, 255, 255, 255); /* 50%可确保显示为正圆 */ border-radius: 50%; /* 按钮上外边距负值,可将它上移,可移动到图片中下方 */ margin: -12px 3px 5px; /* z-index: 99; */ } .slider .btns span.active { background-color: red; }</style><body> <!-- 1.写个轮播图 --> <!-- 2.写个图片盒子 --> <!-- 3.写个按钮盒子 --> <div class="slider"> <div class="imgs"> <img src="images/1.jpg" alt="" data-index="1"> <img src="images/2.jpg" alt="" data-index="2" class="active"> <img src="images/3.jpg" alt="" data-index="3"> </div> <div class="btns"> <span data-index="1" onclick="setActive()" class="active"></span> <span data-index="2" onclick="setActive()"></span> <span data-index="3" onclick="setActive()"></span> </div> </div></body><script> //获取图片按钮 const imgs = document.querySelectorAll('.slider .imgs img'); const btns = document.querySelectorAll('.slider .btns span'); //设置激活状态 function setActive() { //1.获取到当前点击的按钮 console.log(event.target); //2.把图片和按钮的active都清空 imgs.forEach((img) => img.classList.remove("active")) btns.forEach(function (btn) { btn.classList.remove('active'); }) //3.把active显示到当前点击的按钮上,和对应的data-index上 event.target.classList.add('active') imgs.forEach(function (key) { if (key.dataset.index === event.target.dataset.index) { key.classList.add('active') } }) } //实现自动播放 //需要定时器 setInterval()除了回调和时间外,还可传入第三个参数,做为回调的参数 let sj = setInterval(function (arr) { //1.头部删除 let a = arr.shift(); //2.尾部相加 arr.push(a); //console.log(arr); //.事件派发 btns[a].dispatchEvent(new Event('click')) }, 2000, Object.keys(btns)) // console.log('这是按钮',Object.keys(btns)) // console.log('这是图片',Object.keys(imgs)) //当鼠标移动到图片时候停止轮播 //给定时器个变量 //获取当前图片盒子 const himg = document.querySelector('.slider .imgs'); console.log(himg); //鼠标移动到当前盒子是清除定时器 mouseover(移入) himg.addEventListener("mouseover", function () { clearInterval(sj) console.log('停止滚动') }); //当鼠标离开是继续轮播 //获取当前图片盒子 上面以及获取到了我们直接拿来使用 //鼠标离开到当前盒子是继续轮播 mouseout(移除) himg.addEventListener("mouseout", function () { sj = setInterval(function (arr) { let a = arr.shift(); arr.push(a); btns[a].dispatchEvent(new Event('click')) }, 2000, Object.keys(btns)) console.log('继续滚动') }) //向左点击 //获取想左点击按钮 //</script></html>
xhr演示
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>xhr.传参</title></head><body> <button onclick="getUser1(this)">用户信息: xhr</button></body><script> // 1. 传统 XHR // 1. 创建对象: new XMLHttpRequest(); // 2. 响应类型: xhr.responseType = "json"; // 3. 配置参数: xhr.open("GET", url, true); // 4. 请求回调: xhr.onload = () => console.log(xhr.response); // 5. 失败回调: xhr.onerror = () => console.log("Error"); // 6. 发起请求: xhr.send(null); // xhr 至少监听2个事件: load,error, 调用2个函数: open,send // post请求,需要设置一下请求头与请求的数据,其它与get请求完全相同 function getuser1() { //1.创建对象: const xhr = new XMLHttpRequest(); // 2. 响应类型 xhr.responseType = "json"; // 3. 配置参数 let url = "hhttp://xhr411.cc/users.php?id=2"; xhr.open("GET",url,) // 4. 请求回调: xhr.onload = function() { console.log(xhr.response) } //5.失败回调 xhr.onerror = function () { console.log('请求失败') } //6. 发起请求 xhr.send(null); }</script></html>