JS简单实现京东网页轮播图
需要html,css,js,
源代码
HTML
<div class="box">
<!-- 左右两个点击按钮 -->
<a href="javaScript:;" class="leftBtn"><b><</b></a>
<a href="javaScript:;" class="rightBtn"><b>></b></a>
<!-- 轮播图 -->
<ul class="imgList">
<li><img src="./images/1e4bae3d165b7d5e.jpg.webp" alt=""></li>
<li><img src="./images/4698326cac3630e0.jpg.webp" alt=""></li>
<li><img src="./images/8a3012115f1bdc6f.jpg.webp" alt=""></li>
<li><img src="./images/aab57512633dea92.jpg.webp" alt=""></li>
<li><img src="./images/q (1).jpg" alt=""></li>
<li><img src="./images/q (2).jpg" alt=""></li>
<li><img src="./images/1.jpg" alt=""></li>
<li><img src="./images/123.jpg" alt=""></li>
</ul>
<!-- 小圆圈 -->
<ol class="circle">
</ol>
</div>
CSS样式
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 590px;
height: 441px;
background-color: salmon;
margin: 50px auto;
position: relative;
z-index: 99;
overflow: hidden;
}
.imgList {
position: absolute;
list-style: none;
width: 800%;
left: 0;
top: 0;
}
.imgList li {
float: left;
}
.imgList li img {
width: 590px;
height: 441px;
cursor: pointer;
}
.circle {
position: absolute;
width: 150px;
height: 10px;
z-index: 999;
display: flex;
justify-content: space-around;
align-items: center;
left: 38px;
top: 415px;
}
.circle li {
list-style: none;
width: 10px;
height: 10px;
border-radius: 50%;
cursor: pointer;
background-clip: content-box;
border: 1px solid rgba(255, 255, 255, 0.5);
padding: 1px;
}
.current {
background-color: #fff;
}
.leftBtn {
position: absolute;
width: 25px;
height: 35px;
color:white;
background-color: rgba(255, 255, 255, 0.5);
border-radius: 0 100px 100px 0;
left: 0;
top: 200px;
z-index: 66;
text-decoration: none;
text-align: center;
line-height: 33px;
display: none;
}
a:hover{
background-color:rgba(138, 115, 88, 0.336);
}
.rightBtn {
position: absolute;
width: 25px;
height: 35px;
color:white;
background-color: rgba(255, 255, 255, 0.5);
border-radius: 100px 0 0 100px;
right: 0;
top: 200px;
z-index: 66;
text-decoration: none;
text-align: center;
line-height: 33px;
display: none;
}
</style>
JS
<script>
//获取元素
var leftBtn = document.querySelector('.leftBtn'); //左按钮
var rightBtn = document.querySelector('.rightBtn'); //右按钮
var box = document.querySelector('.box'); //最大的盒子
var boxWidth = box.offsetWidth; //盒子宽=图片宽度
//1-鼠标落在div上显示左右按钮
//mouseenter事件为鼠标经过大盒子时显示左右两个按钮
box.addEventListener('mouseenter', function () {
leftBtn.style.display = 'block';
rightBtn.style.display = 'block';
clearInterval(timer);
timer = null;
})
//2-鼠标离开div上显示左右按钮
//mouseleave事件为鼠标离开左右两个按钮隐藏
box.addEventListener('mouseleave', function () {
leftBtn.style.display = 'none';
rightBtn.style.display = 'none';
timer = setInterval(function () {
rightBtn.click();
}, 2000);
})
//3-动态获取图片张数来展示小球个数
var ul = box.querySelector('ul'); //获取大盒子box里的ul标签
var ol = box.querySelector('.circle') //获取大盒子box里的ol标签
//for循环根据图片创建小球个数
for (var i = 0; i < ul.children.length; i++) {
//创建一个小li标签
var li = document.createElement('li');
//记录当前小圆圈的索引号 通过自定义属性来做 为第5步做准备
li.setAttribute('index', i);
//把小li插入到ol里面
ol.appendChild(li);
//4-小圆圈的排他思想 可以在生成小圆圈的同时直接绑定点击事件
li.addEventListener('click', function () {
//把所有小li清除current样式类名
for (var i = 0; i < ol.children.length; i++) {
ol.children[i].className = '';
}
//留下自己获取current类名的样式
this.className = 'current';
//使用动画函数的前提 该元素必须有定位
//注意 移动的是ul而不是li
//滚动图片核心算法 点击某个小圆圈 就让图片滚动
// 5-点击小圆圈 移动图片
//ul移动距离 小圆圈的索引号乘以图片的宽度作为ul运动的距离
//当我们点击了某个小li 就拿到当前小li的索引号
var index = this.getAttribute('index');
//当我们点击了某个小li 就把这个小li的索引给num
num = index;
//当我们点击了某个小li 就把这个小li的索引给circle
circle = index;
//调用动画函数
animate(ul, -index * boxWidth)
})
}
//把ol里面的第一个小li设置名为current
ol.children[0].className = 'current';
//6-克隆第一张图片放到ul最后
var first = ul.children[0].cloneNode(true);
ul.appendChild(first);
//7-点击右侧按钮 图片滚动一张功能
//右侧按钮点击事件
var num = 0; //声明一个变量
var circle = 0;
// circle控制小圆圈播放
rightBtn.addEventListener('click', function () {
//如果走到了最后一张复制的图片 此时我们的ul要快速的复原left为0
//无缝滚动,
if (num == ul.children.length - 2) {
ul.style.left = 0;
num = 0;
}
num++;
animate(ul, -num * boxWidth);
circle++;
//若果circle=4 说明走到了我们克隆的图片了
if (circle == ol.children.length) {
circle = 0;
}
//调用函数
circleChange();
})
//8-左侧按钮点击事件
leftBtn.addEventListener('click', function () {
//如果走到了最后一张复制的图片 此时我们的ul要快速的复原left为0
//无缝滚动,
if (num == 0) {
num = ul.children.length - 1;
ul.style.left = -num * boxWidth + 'px';
}
num--;
animate(ul, -num * boxWidth);
circle--;
//若果circle<0 说明走到了我们克隆的图片了
// if (circle <0) {
// circle = ol.children.length-1;
// }
//上面注释的代码改为三元表达式
circle = circle < 0 ? ol.children.length - 1 : circle;
//调用函数
circleChange();
});
function circleChange() {
//先清除其余小圆圈的类名
for (var i = 0; i < ol.children.length; i++) {
ol.children[i].className = '';
}
//留下当前的小圆圈的类名
ol.children[circle].className = 'current';
}
//9-自动播放功能
var timer = setInterval(function () {
//手动调用点击事件
rightBtn.click();
}, 2000);
///
//动画函数
function animate(obj, target, callback) {
//先清除以前的定时器 只保留当前的一个定时器
clearInterval(obj.timer);
obj.timer = setInterval(function () {
//步长值写到定时器的里面
//把我们歩长值改为整数 不要出现小数点
var step = (target - obj.offsetLeft) / 10;
step = step > 0 ? Math.ceil(step) : Math.floor(step);
if (obj.offsetLeft == target) {
//停止动画 本质是停止定时器
clearInterval(obj.timer);
//回调函数写到定时器结束里面
if (callback) {
//调回函数
callback();
}
}
obj.style.left = obj.offsetLeft + step + 'px';
}, 15)
}
</script>
效果如图
JS简单实现京东网页轮播图相关推荐
- 原生JS仿造华为商城案例-实现了简单页面-两种轮播图思路的实现-动态展示数据
文章目录 功能简介 项目准备 项目说明 方案一:源代码 CSS样式 HTML结构 JS逻辑 方案二:源代码 CSS样式 HTML结构 JS逻辑 功能简介 页面展示 该项目功能实现: 无限滚动轮播图 j ...
- 【JavaScript】缓动动画、网页轮播图
缓动动画 动画函数封装 1.1 动画实现原理 缓动动画 1.1 缓动效果原理 1.2 动画函数多个目标值之间移动 1.3 动画函数添加回调函数 1.4 动画函数封装到单独JS文件里面 案例:京东侧边栏 ...
- Bootstrap练习:京东商城轮播图
练习:京东商城的一个轮播图效果,可以自动切换图片和点击切换图片,主要运用了Bootstrap的Carousel插件与js插件等知识内容,练习源文件下面有下载链接. 目录 前言 一.练习 1.目标图: ...
- web前端html图片轮播,如何使用LayUI实现网页轮播图_WEB前端开发,layui,轮播图
关于html5中自定义属性的介绍_WEB前端开发 html5为我们提供了以[data-]为前缀定义需要的属性即可设置自定义属性,如[ ].本篇文章介绍了使用LayUI实现网页轮播图的方法,具有一定的参 ...
- layui的轮播图片自适应大小_如何使用LayUI实现网页轮播图
详细内容 本篇文章介绍了使用LayUI实现网页轮播图的方法,具有一定的参考价值,希望对学习Layui的朋友有帮助!想要用layui写出来轮播图,需要先下载layui的文档,下载到电脑上就可以了,随便保 ...
- Javascript-API-BOM、动画函数、网页轮播图、节流阀、筋斗云、固定侧边栏返回顶部案例
动画实现原理 核心原理:通过定时器 setInterval() 不断移动盒子位置. 实现步骤: 获得盒子当前位置 让盒子在当前位置加上1个移动距离 利用定时器不断重复这个操作 加一个结束定时器的条件 ...
- 【JavaScript】网页轮播图
目录 HTML搭建 功能实现 小圆圈事件 左右按钮事件 自动播放 轮播图也叫焦点图,是网页中比较常见的网页特效. 功能: 鼠标经过轮播图模块,左右按钮显示,离开隐藏左右按钮. 点击右侧按钮一次,图片往 ...
- html js轮播图无白链接,JavaScript:100%原生js实现左右切换的轮播图(无延迟加载)...
简介这篇文章主要介绍了JavaScript:100%原生js实现左右切换的轮播图(无延迟加载)以及相关的经验技巧,文章约11114字,浏览量505,点赞数3,值得参考! *{ margin:0; pa ...
- 网页轮播图+缓动效果
实现某宝上面的网页轮播图+缓动效果 代码和注释: <!DOCTYPE html> <html lang="en"><head><meta ...
最新文章
- 58到家技术总监沈剑:有选择的借鉴才能不走弯路
- Codeforces 235B Let's Play Osu!
- 听说现在都考这些React面试题
- [BZOJ 1072] 排列perm
- HDU1878-欧拉回路(入门题+并查集)
- mysql 严格模式_MySQL 开启/关闭 严格模式(Strict Mode)
- python银行家算法_Linux 死锁概念与银行家算法python 实现
- 【Flutter】基础组件【06】Image
- 两个常见小故障的修复
- 银河麒麟Linux系统安装谷歌浏览器
- 教你如何写第一个jsp页面
- ubuntu安装git失败解决办法
- angr源码分析——cle.Loader类
- 用快递单号快速查询物流退回件的单号
- Linux赋予文件权限 最高权限 可执行权限
- python学习笔记之pdf文档提取
- 前端AI语音方面的实现
- 关于oracle怎么保证读一致性
- UE4数字孪生 OD线开发浅析
- Ubuntu系统开启Intel千兆网卡SR-IOV
热门文章
- web前端需要学习什么?需要掌握什么技术
- 舆情智慧决策闭环管理平台
- WhatsApp拓客云控系统-SendWS群控管理后台功能介绍(三):WhatsApp多账号管理记录查询
- 自动驾驶轨迹预测论文阅读(二)TPNet: Trajectory Proposal Network for Motion Prediction
- 【python】爬虫入门:代理IP池的使用、文件的写入与网易云爬取时的注意事项
- VMware Workstation虚拟机装Win7详细高清图文教程
- 关于PostMan发送请求获得响应
- Taro 小程序开发大型实战(三):实现微信和支付宝多端登录
- 出生日期正则表达式丨出生日期年月日正则如何表达?
- java解压两层zip文件_Java解压缩zip - 解压缩多个文件或文件夹实例