一.焦点轮播
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0px;
padding: 0px;
}
ul,
li {
list-style: none;
}
.content {
width: 600px;
height: 315px;
margin: 100px auto;
border: 1px solid red;
position: relative;
overflow: hidden;
}
.content .view {
width: 2400px;
height: 315px;
position: absolute;
}
.content .view div {
width: 600px;
height: 315px;
float: left;
}
.content .view div img {
width: 100%;
height: 100%;
}
.content .doc {
width: 105px;
height: 15px;
position: absolute;
left: 50%;
margin-left: -52px;
bottom: 20px;
}
.content .doc li {
width: 15px;
height: 15px;
background-color: #fff;
border-radius: 50%;
float: left;
margin-right: 15px;
}
.content .doc li:last-child {
margin-right: 0px;
}
.content .doc .active {
background-color: red;
}
</style>
</head>
<body>
<div class="content">
<div class="view">
<div>
<img src="https://img.alicdn.com/imgextra/i4/O1CN01GOlEEW1zidUliI8O7_!!6000000006748-2-tps-846-472.png" alt="">
</div>
<div>
<img src="https://img.alicdn.com/imgextra/i2/O1CN01lFNk4Z1JDkviZe8EG_!!6000000000995-2-tps-846-472.png" alt="">
</div>
<div>
<img src="https://img.alicdn.com/imgextra/i4/O1CN01cmWoxh1S6H07yrmcM_!!6000000002197-0-tps-846-472.jpg" alt="">
</div>
<div>
<img src="https://img.alicdn.com/imgextra/i2/O1CN01jH9w4F1sEDtCgpH3r_!!6000000005734-0-tps-846-472.jpg" alt="">
</div>
</div>
<ul class="doc">
<li class="item active"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
</div>
<script src="./112-animation.js"></script>
<script>
// 1.获取元素
var view = document.getElementsByClassName("view")[0];
var items = document.getElementsByClassName("item");
// 封装排他函数
function siblings(ele) {
for (var k = 0; k < ele.length; k++) {
ele[k].className = "item";
}
}
var timerId;
// 2.给所有的小圆点都绑定事件
for (var i = 0; i < items.length; i++) {
items[i].index = i;
items[i].addEventListener('mouseenter', function() {
// 调用排他函数 修改所有小圆点的样式为默认
siblings(items)
// 修改当前小圆点的样式为选中状态
this.className = "item active";
// 计算一个目标值 用来控制view 元素每次的移动距离
// console.log(this.index);
var target = this.index * view.children[0].offsetWidth;
console.log(-target);
// 调用函数 让他动
slowMove(view, -target);
// constantMove(view, -target)
})
}
</script>
</body>
</html>
二.自动轮播
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0px;
padding: 0px;
}
ul,
li {
list-style: none;
}
.content {
width: 600px;
height: 315px;
margin: 100px auto;
border: 1px solid red;
position: relative;
overflow: hidden;
}
.content .view {
width: 2400px;
height: 315px;
position: absolute;
}
.content .view div {
width: 600px;
height: 315px;
float: left;
}
.content .view div img {
width: 100%;
height: 100%;
}
.content .doc {
width: 105px;
height: 15px;
position: absolute;
left: 50%;
margin-left: -52px;
bottom: 20px;
}
.content .doc li {
width: 15px;
height: 15px;
background-color: #fff;
border-radius: 50%;
float: left;
margin-right: 15px;
}
.content .doc li:last-child {
margin-right: 0px;
}
.content .doc .active {
background-color: red;
}
.content .next,
.content .prev {
width: 40px;
height: 70px;
background-color: rgba(0, 0, 0, 0.6);
color: white;
text-align: center;
line-height: 70px;
font-size: 24px;
position: absolute;
z-index: 2;
top: 50%;
margin-top: -35px;
display: none;
}
.content .next {
right: 0px;
}
.content .prev {
left: 0px;
}
</style>
</head>
<body>
<div class="content">
<div class="view">
<div>
<img src="https://img.alicdn.com/imgextra/i4/O1CN01GOlEEW1zidUliI8O7_!!6000000006748-2-tps-846-472.png" alt="">
</div>
<div>
<img src="https://img.alicdn.com/imgextra/i2/O1CN01lFNk4Z1JDkviZe8EG_!!6000000000995-2-tps-846-472.png" alt="">
</div>
<div>
<img src="https://img.alicdn.com/imgextra/i4/O1CN01cmWoxh1S6H07yrmcM_!!6000000002197-0-tps-846-472.jpg" alt="">
</div>
<div>
<img src="https://img.alicdn.com/imgextra/i2/O1CN01jH9w4F1sEDtCgpH3r_!!6000000005734-0-tps-846-472.jpg" alt="">
</div>
</div>
<ul class="doc">
<li class="item active"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<div class="next"> > </div>
<div class="prev"> < </div>
</div>
<script src="./112-animation.js"></script>
<script>
// 1.获取元素
var view = document.getElementsByClassName("view")[0];
var items = document.getElementsByClassName("item");
var content = document.getElementsByClassName("content")[0];
var next = document.getElementsByClassName("next")[0];
var prev = document.getElementsByClassName("prev")[0];
var timerId;
var timerId2;
// 封装排他函数
function siblings(ele) {
for (var k = 0; k < ele.length; k++) {
ele[k].className = "item";
}
}
// 计数器
var count = 0;
function autoPlay() {
clearInterval(timerId2);
timerId2 = setInterval(function() {
// 排他
siblings(items);
// 让计数器自增
count++;
// 为了限制小圆点的数量
if (count >= 4) {
count = 0;
}
// console.log(count);
// 改变当前小圆点的样式
items[count].className = "item active";
// 计算出目标值距离
var target = count * view.children[0].offsetWidth;
// 调用函数
slowMove(view, -target);
}, 2000)
}
// 自动轮播开始
autoPlay();
content.onmouseenter = function() {
clearInterval(timerId2);
next.style.display = "block";
prev.style.display = "block";
}
content.onmouseleave = function() {
autoPlay();
next.style.display = "none";
prev.style.display = "none";
}
next.onclick = function() {
// 排他
siblings(items);
count++;
// 为了限制小圆点的数量
if (count >= 4) {
count = 0;
}
// console.log(count);
// 改变当前小圆点的样式
items[count].className = "item active";
// 计算出目标值距离
var target = count * view.children[0].offsetWidth;
// 调用函数
slowMove(view, -target);
};
prev.onclick = function() {
// 排他
siblings(items);
count--;
// 为了限制小圆点的数量
if (count < 0) {
count = 3;
}
// 改变当前小圆点的样式
// console.log(count);
items[count].className = "item active";
// 计算出目标值距离
var target = count * view.children[0].offsetWidth;
// 调用函数
slowMove(view, -target);
};
</script>
</body>
</html>
三.无缝轮播
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0px;
padding: 0px;
}
ul,
li {
list-style: none;
}
.content {
width: 600px;
height: 315px;
margin: 100px auto;
border: 1px solid red;
position: relative;
overflow: hidden;
}
.content .view {
width: 3000px;
height: 315px;
position: absolute;
}
.content .view div {
width: 600px;
height: 315px;
float: left;
}
.content .view div img {
width: 100%;
height: 100%;
}
.content .doc {
width: 105px;
height: 15px;
position: absolute;
left: 50%;
margin-left: -52px;
bottom: 20px;
}
.content .doc li {
width: 15px;
height: 15px;
background-color: #fff;
border-radius: 50%;
float: left;
margin-right: 15px;
}
.content .doc li:last-child {
margin-right: 0px;
}
.content .doc .active {
background-color: red;
}
.content .next,
.content .prev {
width: 40px;
height: 70px;
background-color: rgba(0, 0, 0, 0.6);
color: white;
text-align: center;
line-height: 70px;
font-size: 24px;
position: absolute;
z-index: 2;
top: 50%;
margin-top: -35px;
display: none;
}
.content .next {
right: 0px;
}
.content .prev {
left: 0px;
}
</style>
</head>
<body>
<div class="content">
<div class="view">
<div>
<img src="https://img.alicdn.com/imgextra/i4/O1CN01GOlEEW1zidUliI8O7_!!6000000006748-2-tps-846-472.png" alt="">
</div>
<div>
<img src="https://img.alicdn.com/imgextra/i2/O1CN01lFNk4Z1JDkviZe8EG_!!6000000000995-2-tps-846-472.png" alt="">
</div>
<div>
<img src="https://img.alicdn.com/imgextra/i4/O1CN01cmWoxh1S6H07yrmcM_!!6000000002197-0-tps-846-472.jpg" alt="">
</div>
<div>
<img src="https://img.alicdn.com/imgextra/i2/O1CN01jH9w4F1sEDtCgpH3r_!!6000000005734-0-tps-846-472.jpg" alt="">
</div>
<div>
<img src="https://img.alicdn.com/imgextra/i4/O1CN01GOlEEW1zidUliI8O7_!!6000000006748-2-tps-846-472.png" alt="">
</div>
</div>
<ul class="doc">
<li class="item active"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<div class="next"> > </div>
<div class="prev"> < </div>
</div>
<script src="./112-animation.js"></script>
<script>
// 1.获取元素
var view = document.getElementsByClassName("view")[0];
var items = document.getElementsByClassName("item");
var content = document.getElementsByClassName("content")[0];
var next = document.getElementsByClassName("next")[0];
var prev = document.getElementsByClassName("prev")[0];
var timerId;
var timerId2;
// 1.鼠标进入盒子 让 左右按钮显示 离开消失
// 2.给左边按钮绑定事件 点击向左 走
// 3.给右边按钮绑定事件 点击向右走
// 4.自动轮播调用第二步就可以了
// 5.焦点轮播
// 封装排他函数
function siblings(ele) {
for (var k = 0; k < ele.length; k++) {
ele[k].className = "item";
}
}
// 3.给右边按钮绑定事件 点击向右走
// 用来控制小圆点
var circlCount = 0;
// 用来计算view每次移动的目标值
var viewCount = 0;
next.onclick = function() {
// 让计数器自增
circlCount++;
viewCount++;
// 小圆点最大到3
if (circlCount > 3) {
circlCount = 0;
}
// 移动目标值 最大是 2400
// viewCount 最大是4
if (viewCount > 4) {
viewCount = 1;
view.style.left = 0 + "px";
}
siblings(items)
items[circlCount].className = "item active";
var target = viewCount * view.children[0].offsetWidth;
slowMove(view, -target);
}
// 2.给左边按钮绑定事件 点击向左 走
prev.onclick = function() {
circlCount--;
viewCount--;
// 判断是否是第一张图片
// console.log(circlCount);
if (circlCount < 0) {
circlCount = items.length - 1;
}
if (viewCount < 0) {
viewCount = view.children.length - 2;
view.style.left = -(view.children.length - 1) * view.children[0].offsetWidth + "px";
}
siblings(items)
items[circlCount].className = "item active";
var target = viewCount * view.children[0].offsetWidth;
slowMove(view, -target);
}
// 4.自动轮播调用第二步就可以了
function autoPlay() {
timerId2 = setInterval(function() {
next.onclick();
}, 2000);
}
autoPlay();
// 1.鼠标进入盒子 让 左右按钮显示 离开消失
content.onmouseenter = function() {
next.style.display = "block";
prev.style.display = "block";
clearInterval(timerId2);
}
content.onmouseleave = function() {
next.style.display = "none";
prev.style.display = "none";
autoPlay()
}
// 5.焦点轮播
for (var i = 0; i < items.length; i++) {
items[i].index = i;
items[i].addEventListener('mouseenter', function() {
// 调用排他函数 修改所有小圆点的样式为默认
siblings(items)
// 修改当前小圆点的样式为选中状态
this.className = "item active";
circlCount = this.index;
viewCount = this.index;
// 计算一个目标值 用来控制view 元素每次的移动距离
// console.log(this.index);
var target = viewCount * view.children[0].offsetWidth;
console.log(-target);
// 调用函数 让他动
slowMove(view, -target);
// constantMove(view, -target)
})
}
</script>
</body>
</html>
四.回到顶部
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0px;
padding: 0px;
}
.header {
width: 100%;
height: 60px;
background-color: pink;
}
.banner {
width: 1200px;
height: 600px;
background-color: skyblue;
margin: 100px auto;
}
.main {
width: 1200px;
height: 2000px;
background-color: purple;
margin: 100px auto;
}
.footer {
width: 100%;
height: 400px;
background-color: black;
}
.sidbar {
width: 60px;
height: 240px;
position: fixed;
left: 0px;
top: 50%;
margin-top: -120px;
border: 1px solid red;
display: none;
}
.sidbar div {
width: 60px;
height: 60px;
text-align: center;
line-height: 60px;
font-size: 12px;
border: 1px solid #ccc;
box-sizing: border-box;
}
.sidbar div:last-child {
line-height: 30px;
}
</style>
</head>
<body>
<div class="header"></div>
<div class="banner"></div>
<div class="main"></div>
<div class="footer"></div>
<div class="sidbar">
<div>1</div>
<div>1</div>
<div>1</div>
<div class="backTop">回到 <br> 顶部</div>
</div>
<script src="./animation.js"></script>
<script>
var main = document.getElementsByClassName("main")[0];
var sidbar = document.getElementsByClassName("sidbar")[0];
var backTop = document.getElementsByClassName("backTop")[0];
var timerId = null;
document.onscroll = function () {
if (window.pageYOffset >= main.offsetTop) {
sidbar.style.display = "block";
} else {
sidbar.style.display = "none";
}
}
// 用来获取 页面 滚动条被圈去的 上侧距离
console.log(document.documentElement.scrollTop);
backTop.onclick = function () {
timerId = setInterval(function () {
// 目标值 - 当前位置 /10
// 缓慢
var speed = (0 - document.documentElement.scrollTop) / 10;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
document.documentElement.scrollTop += speed;
// 匀速
// document.documentElement.scrollTop -= 20;
if (document.documentElement.scrollTop == 0) {
clearInterval(timerId);
}
}, 20)
}
</script>
</body>
</html>
五.旋转小球
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.content {
width: 800px;
height: 800px;
margin: 100px auto;
border: 1px solid red;
position: relative;
}
.content .box {
width: 100px;
height: 100px;
background-color: pink;
border-radius: 50%;
position: absolute;
}
</style>
</head>
<body>
<div class="btn">点击运动</div>
<div class="content">
<div class="box"></div>
</div>
<script>
var content = document.getElementsByClassName("content")[0];
var box = document.getElementsByClassName("box")[0];
var btn = document.getElementsByClassName("btn")[0];
var timerid;
btn.onclick = function () {
var maxLeft = content.offsetWidth - (content.clientLeft * 2) - box.offsetWidth;
var maxTop = content.offsetHeight - (content.clientTop * 2) - box.offsetHeight;
timerid = setInterval(function () {
if (box.offsetLeft < maxLeft && box.offsetTop == 0) {
box.style.left = box.offsetLeft + 10 + "px";
} else if (box.offsetTop < maxTop && box.offsetLeft == maxLeft) {
box.style.top = box.offsetTop + 10 + "px";
} else if (box.offsetTop == maxTop && box.offsetLeft > 0) {
box.style.left = box.offsetLeft - 10 + "px";
} else if (box.offsetLeft == 0 && box.offsetTop > 0) {
box.style.top = box.offsetTop - 10 + "px";
}
}, 20)
}
</script>
</body>
</html>