博主信息
博文 26
粉丝 0
评论 1
访问量 16919
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
实例演示仿淘宝移动端轮播图
P粉751989631
原创
1012人浏览过

实例演示仿淘宝移动端轮播图

  1. <title>实战: 仿淘宝移动端轮播图-布局</title>
  2. <link rel="stylesheet" href="static/css/1.css" />
  3. </head>
  4. <body>
  5. <div class="slideshow">
  6. <!-- 1. 图片容器 -->
  7. <div class="imgs">
  8. <img src="static/images/item1.jpeg" alt="" class="active" />
  9. <img src="static/images/item2.jpeg" alt="" />
  10. <img src="static/images/item3.jpeg" alt="" />
  11. </div>
  12. <!-- 2. 按钮容器 -->
  13. <div class="btns">
  14. <span class="active"></span>
  15. <span></span>
  16. <span></span>
  17. </div>
  18. </div>
  19. </body>

···
body {
background-color: #eee;
}

/ 轮播图容器 /
.slideshow {
width: 240px;
height: 360px;
}

/ 图片容器 /
.slideshow .imgs {
width: inherit;
height: inherit;
}

/ 图片适应 /
.slideshow img {
width: 100%;
height: 100%;
border-radius: 10px;

/ 默认全隐藏 /
display: none;
}

/ 设置图片的激活状态 /
.slideshow img.active {
display: block;
}

.slideshow img:hover {
cursor: pointer;
}

/ ——— 按钮容器 ———- /

/ 按钮容器 /
.slideshow .btns {
display: flex;
place-content: center;

/ position: relative;
top: -40px;
/

transform: translateY(-40px);
}

.slideshow .btns > span {
background-color: rgba(233, 233, 233, 0.5);
height: 16px;
width: 16px;
border-radius: 50%;
margin: 5px;
}

.slideshow .btns > span.active {
background-color: orangered;
}

.slideshow .btns > span:hover {
cursor: pointer;
}
···

···
// todo 轮播图模块

// * 1. 图片组
const imgArr = [
{
key: 1,
src: “static/images/item1.jpeg”,
url: “https://php.cn“,
},
{
key: 2,
src: “static/images/item2.jpeg”,
url: “https://php.cn“,
},
{
key: 3,
src: “static/images/item3.jpeg”,
url: “https://php.cn“,
},
];

// * 2. 创建图片组
function createImgs(imgs) {
// 图片资源比较大,所以建议用文档片断来做
const frag = new DocumentFragment();

for (let i = 0; i < imgArr.length; i++) {
// 1. 创建图片元素
// const img = document.createElement(‘img’)
const img = new Image();

  1. // 2. 添加属性
  2. // src
  3. img.src = imgArr[i].src;
  4. // data-key
  5. img.dataset.key = imgArr[i].key;
  6. // class='active': 第一张
  7. if (i === 0) img.classList.add("active");
  8. // 3. 添加事件
  9. img.onclick = () => (location.href = imgArr[i].url);
  10. // 添加图片分二步: 第一步加到内存中的文档片断元素上, 第二步再加到图片容器上
  11. // 4. 添加图片到片断中
  12. frag.append(img);

}
// 5. 将片断添加到图片容器元素中
imgs.append(frag);
}

// * 3. 创建按钮组
function createBtns(imgs, btns) {
// 计算出所有图片的数量,根据这个来创建相同数量的按钮
// console.log(imgs.childElementCount);
let length = imgs.childElementCount;

for (let i = 0; i < length; i++) {
// 1. 生成按钮: <span>
const btn = document.createElement(“span”);

  1. // 2. 按钮索引: data-key, 必须与图片索引一致
  2. btn.dataset.key = imgs.children[i].dataset.key;
  3. // 3. 第1个按钮处于激活状态
  4. if (i === 0) btn.classList.add("active");
  5. // 4. 添加到容器中
  6. btns.append(btn);

}
}

// * 4. 按钮点击事件
function switchImg(btn, imgs) {
// 1. 去掉图片和按钮的激活状态
[…btn.parentNode.children].forEach((btn) => btn.classList.remove(“active”));
[…imgs.children].forEach((img) => img.classList.remove(“active”));

// 2. 将当前的按钮处于激活状态
btn.classList.add(“active”);

// 3. 根据按钮索引,找到对应的图片
const currImg = […imgs.children].find(function (img) {
return img.dataset.key == btn.dataset.key;
});

// const currImg = […imgs.children].find(img => img.dataset.key == btn.dataset.key);
// console.log(currImg);

// 4. 将当前图片处于激活状态(显示出来)
currImg.classList.add(“active”);
}

// * 5. 定时播放
function timePlay(btnArr, btnKeys) {
// 1. 头部取一个
let key = btnKeys.shift();

// 2. 根据索引找到对应的按钮,再给它自动派发一个点击事件
btnArr[key].dispatchEvent(new Event(“click”));

// 3. 把刚才到出的按钮再从尾部进入,实现首尾相连
btnKeys.push(key);
}

export { createImgs, createBtns, switchImg, timePlay };
···
结果显示

批改老师:PHPzPHPz

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学