1.秒杀功能
<!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>
.box {
display: flex;
width: 200px;
height: 100px;
background-color: tomato;
padding: 40px;
border-radius: 4px;
font-size: 40px;
color: #fff;
}
</style>
</head>
<body>
<div class="box">
<div class="h">00</div>
<div>:</div>
<div class="m">01</div>
<div>:</div>
<div class="s">01</div>
</div>
</body>
<script>
/*
目标:
倒计时:每隔一秒让秒数-1
当秒小于0 让分钟变成59 小时-1
当时 分 秒 都为0 停止
步骤: 1.获取元素
2.获取元素的文本
3.定时器
让秒 -1
判断 秒<0
变成59
判断 分钟< 0
变成59 小时-1
如果都是0 停止
*/
// 1.获取元素
var hh = document.querySelector('.h')
var mm = document.querySelector('.m')
var ss = document.querySelector('.s')
// 2.获取元素里面的文本
var h = parseInt(hh.innerText);
var m = parseInt(mm.innerText)
var s = parseInt(ss.innerText)
// 3.定时器
var timer = setInterval(function () {
if (h === 0 && m === 0 && s === 0) {
clearInterval(timer);
return;
}
s--;
s < 0 ? (m--, (s = 59)) : "";
m < 0 ? ((m = 59), h--) : "";
// 把数字修改回去
ss.innerText = s < 10 ? "0" + s : s;
mm.innerText = m < 10 ? "0" + m : m;
hh.innerText = h < 10 ? "0" + h : h;
}, 1000)
</script>
</html>
2.位移轮播图
<!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>
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
.box {
width: 800px;
margin: 100px auto;
overflow: hidden;
}
.imgs {
width: 600%;
display: flex;
}
.ani {
transition: transform 400ms;
}
img {
width: 800px;
}
</style>
</head>
<body>
<div class="box">
<ul class="imgs ani">
<li>
<a href="">
<img src="./images/45984126f7e43ea93f556ea880adca06.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/573de537b5c805f9c93f6526445cc7b2.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/5c3f383dac7a3b1f5ab8c58a00d56489.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/b0634b59221cfd322a65050930299b72.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/dda219f5a53e1f48fa6a2b72459a4420.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/45984126f7e43ea93f556ea880adca06.jpg" alt="" />
</a>
</li>
</ul>
</div>
</body>
<script>
/*
目标:轮播图轮到最后一张的时候,继续向左移动 出现 "第一张"
解决: 1.把真正的第一张图复制一份 放在最后 把ul的宽度改为600%
2.当第六张动画结束的时候 立刻切换到真正的第一张
*/
// 1.获取元素
var imgs = document.querySelector('.imgs')
console.log(imgs);
var current = 0;
// 定时器每隔三秒 向左移动
var timer = setInterval(function () {
// current++;
// if(current>imgs.children.length-1){
// current = 0;
// }
current = ++current % imgs.children.length;
// ul 的位置 当前图片* -800
var target = current * -800;
imgs.style.transform = 'translateX(' + target + 'px)';
}, 1000);
// 解决无缝滚动的问题
imgs.addEventListener('transitionend',function(){
if(current === imgs.children.length-1){
// 首先需要去掉动画样式 ani
imgs.classList.remove('ani');
// 让ul立刻变成第一张图
imgs.style.transform = 'translatex(0)';
// 同步 current
current = 0;
// 稍等一下在加载动画效果
setTimeout(function(){
imgs.classList.add('ani');
},10);
}
});
</script>
</html>
3.位移轮播图
<!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>
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
.box {
width: 800px;
margin: 100px auto;
overflow: hidden;
}
.imgs {
width: 500%;
display: flex;
transition: transform 200ms;
}
img {
width: 800px;
}
</style>
</head>
<body>
<div class="box">
<ul class="imgs">
<li>
<a href="">
<img src="./images/45984126f7e43ea93f556ea880adca06.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/573de537b5c805f9c93f6526445cc7b2.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/5c3f383dac7a3b1f5ab8c58a00d56489.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/b0634b59221cfd322a65050930299b72.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/dda219f5a53e1f48fa6a2b72459a4420.jpg" alt="" />
</a>
</li>
</ul>
</div>
</body>
<script>
/*
目标:每隔3秒向左移动
transform:translateX(-n px)
控制ul的位置
*/
// 1.获取元素
var imgs = document.querySelector('.imgs');
console.log(imgs);
var current = 0; //当前是第几张图
// 定时器 每隔3秒 向左移动
var timer = setInterval(function () {
//current++;
// if(current>imgs.children.length){
// current=0;
// }
current = ++current % imgs.children.length;
//ul的位置 当前图片 * -800
var target = current * -800;
imgs.style.transform = 'translateX(' + target + 'px)';
}, 3000);
</script>
</html>
4.小圆点位移轮播图
<!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>
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
.box {
width: 800px;
margin: 100px auto;
overflow: hidden;
position: relative;
}
.imgs {
width: 600%;
display: flex;
}
.ani {
transition: transform 400ms;
}
img {
width: 800px;
}
.dots {
position: absolute;
left: 40px;
bottom: 80px;
}
.dots-container {
display: flex;
}
.dots-container i {
background-color: rgba(255, 255, 255, 0.85);
width: 20px;
height: 20px;
border-radius: 50%;
margin-right: 10px;
}
.dots-container .active {
box-shadow: 0 0 4px 2px #f00;
}
</style>
</head>
<body>
<div class="box">
<ul class="imgs ani">
<li>
<a href="">
<img src="./images/45984126f7e43ea93f556ea880adca06.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/573de537b5c805f9c93f6526445cc7b2.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/5c3f383dac7a3b1f5ab8c58a00d56489.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/b0634b59221cfd322a65050930299b72.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/dda219f5a53e1f48fa6a2b72459a4420.jpg" alt="" />
</a>
</li>
<li>
<a href="">
<img src="./images/45984126f7e43ea93f556ea880adca06.jpg" alt="" />
</a>
</li>
</ul>
<div class="dots">
<div class="dots-container">
<i class="active"></i>
<i></i>
<i></i>
<i></i>
<i></i>
</div>
</div>
</div>
</body>
<script>
// 目标:实现对应的圆点
// 鼠标移动到圆点上,立刻切换对应的图片
// 图片自动轮播的时候小圆点页对应要变
// 步骤:
// 1.小圆点的结构
// 2.获取元素 注册鼠标 移入事件
// 3.让ul到达我指定得我位置 展示对应的图片
// 4.处理图片自动轮播的时候 小圆点对应跟着变化
window.onload = function () {
var dots = document.querySelectorAll(".dots-container i");
console.log(dots);
var imgWidth = document.querySelector(".imgs img").offsetWidth;
console.log(imgWidth);
//注册事件
dots.forEach(function (e, i) {
// e代表i标签 i索引 0 1 2 3 4
e.addEventListener("mouseenter", function () {
// 位置 索引* -图片宽度
var target = -imgWidth * i;
//图片位移到指定的位置
imgs.style.transform = "translateX(" + target + "px)";
//处理小圆点的样式
dots.forEach(function (dot) {
dot.classList.remove("active");
});
//然后把当前的加上样式
this.classList.add("active");
//同步索引
current = i;
});
});
// 处理轮播图自动的时候小圆点的样式
// 1.获取元素
var imgs = document.querySelector(".imgs");
// console.log(imgs);
var current = 0; //当前是第几张图
// 定时器 每隔3秒 向左移动
var timer = setInterval(function () {
// current++;
// if (current > imgs.children.length-1) {
// current = 0;
// }
current = ++current % imgs.children.length;
// ul的位置 当前图片* -800
var target = current * -imgWidth;
imgs.style.transform = "translateX(" + target + "px)";
console.log(imgs.style.transform);
dots.forEach(function (e) {
e.classList.remove("active");
});
//找到对应的点变红
// 给用户一个假象 最后一张图 其实就是第一张图 走到最后一张图的时候 让第一个小圆圈变红
if (current === imgs.children.length - 1) {
dots[0].classList.add("active");
} else {
dots[current].classList.add("active");
}
}, 2000);
// 解决无缝滚动的问题
imgs.addEventListener("transitionend", function () {
if (current === imgs.children.length - 1) {
//首先需要去掉动画样式 ani
imgs.classList.remove("ani");
// 让ul立刻变成第一张图
imgs.style.transform = "translateX(0)";
// 同步current
current = 0;
//稍等一下在加动画效果
setTimeout(function () {
imgs.classList.add("ani");
}, 10);
}
});
};
</script>
</html>
4.offset.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;
}
.box {
border: 10px solid #f0f;
height: 210px;
width: 200px;
background-color: tomato;
padding: 20px;
margin-top: 4px;
}
</style>
</head>
<body>
<style>
.yeye {
width: 400px;
height: 400px;
background-color: lawngreen;
position: relative;
}
.baba {
width: 300px;
height: 300px;
background-color: tomato;
margin-left: 100px;
}
.erzi {
width: 200px;
height: 200px;
background-color: pink;
margin-left: 100px;
}
</style>
<div class="box"></div>
<div class="yeye">
<div class="baba">
<div class="erzi"></div>
</div>
</div>
</body>
<script>
/*
如果你想获得一个盒子的宽高 padding+border+content
element.offsetWidth
element.offsetHeight
*/
var box = document.querySelector(".box");
console.log(box.offsetWidth);
console.log(box.offsetHeight);
// element.offsetParent
// 1.返回离我最近的定位的前代元素
// 2.body
var yeye = document.querySelector(".yeye");
var baba = document.querySelector(".baba");
var erzi = document.querySelector(".erzi");
console.log(yeye.offsetParent);
console.log(baba.offsetParent);
console.log(erzi.offsetParent);
// offsetLeft 得到相对于某个前代元素的左边的偏移
console.log(yeye.offsetLeft);
console.log(baba.offsetLeft);
console.log(erzi.offsetLeft);
// // offsetTop 得到相对于某个前代元素的顶部的偏移
console.log(yeye.offsetTop);
</script>
</html>
5.定时器动画
<!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>
.box {
width: 100px;
height: 100px;
background-color: cyan;
position: absolute;
top: 100px;
left: 100px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
<script>
/*
以前没有css3属性 就需要使用定时器实现动画
动画的原理: 让一个物体在微小的时间内.发生微小的位移或者形变
步骤:首先盒子元素 慢慢地从左边到右边
思路: 盒子每隔20ms 向右边移动1px
*/
// 1.获取元素
var box = document.querySelector(".box");
var timer = setInterval(function () {
// 获取原来的位置
var current = box.offsetLeft;
current += 10;
//修改left属性
box.style.left = current + "px";
// 距离左边900px的时候就停止
if (current >= 900) {
clearInterval(timer);
}
}, 20);
</script>
</html>
6.向左向右定时器
<!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>
.box {
width: 100px;
height: 100px;
background-color: cyan;
position: absolute;
top: 100px;
left: 100px;
}
</style>
</head>
<body>
<input type="button" value="向右" id="btn1" />
<input type="button" value="向左" id="btn2" />
<div class="box"></div>
</body>
<script>
/*
以前没有css3属性 就需要使用定时器实现动画
动画的原理: 让一个物体在微小的时间内.发生微小的位移或者形变
步骤:首先盒子元素 慢慢地从左边到右边
思路: 盒子每隔20ms 向右边移动1px
*/
// 1.获取元素
var box = document.querySelector(".box");
var btn1 = document.getElementById("btn1");
var btn2 = document.getElementById("btn2");
//向右
btn1.onclick = function () {
var timer = setInterval(function () {
// 获取原来的位置
var current = box.offsetLeft;
current += 10;
//修改left属性
box.style.left = current + "px";
// 距离左边900px的时候就停止
if (current >= 900) {
clearInterval(timer);
}
}, 20);
};
// 向左
btn2.onclick = function () {
var timer = setInterval(function () {
// 获取原来的位置
var current = box.offsetLeft; //只读的
current -= 10;
//修改left属性
box.style.left = current + "px";
// 距离左边900px的时候就停止
if (current <= 100) {
clearInterval(timer);
}
}, 20);
};
</script>
</html>
7.封装动画函数实现向左向右
<!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>
.box,
.box2 {
width: 100px;
height: 100px;
background-color: cyan;
position: absolute;
top: 100px;
left: 100px;
}
.box2 {
top: 300px;
background-color: lawngreen;
}
</style>
</head>
<body>
<input type="button" value="向右" id="btn1" />
<input type="button" value="向左" id="btn2" />
<div class="box"></div>
<div class="box2"></div>
</body>
<script>
/*
让动画的代码执行
分析:参数
1.元素对象 element
2.每步要走多远 step
3.目标位置 target
*/
var timer = null;
function animate(element, target, step) {
clearInterval(element.timer);
var step = step || 10;
element.timer = setInterval(function () {
//得到当前的位置
var current = element.offsetLeft;
// current 只能 + 或者 -
// if(current<target){
// // 向右
// current +=step;
// } else{
// current -=step;
// }
// 可以简化
// current<target?current+=step:curren-=step;
current += current < target ? step : -step;
// 修改位置
element.style.left = current + "px";
// 到达目标就停止
// 如果currenthe target之间的差 小于等于step
console.log(step);
if (Math.abs(target - current) <= step) {
element.style.left = target + "px";
clearInterval(element.timer);
}
}, 20);
}
// 1.获取元素
var box = document.querySelector(".box");
var box2 = document.querySelector(".box2");
var btn1 = document.getElementById("btn1");
var btn2 = document.getElementById("btn2");
//向右
btn1.onclick = function () {
// animate(box, 900);
animate(box2, 600);
};
// 向左
btn2.onclick = function () {
// animate(box, 100);
animate(box2, 100);
};
</script>
</html>
|