轮播图
思路
/*
轮播:
核心: 当前下标
方式:大图 display 小圆点 backgroundColor
属性:
1. 获取大盒子
2. 获取大图(ul_li)
3. 计算大图数量
4. 创建并返回所有的小圆点 = 补全页面()
5. 获取左按钮
6. 获取右按钮
7. 当前下标 = 0
8. 添加事件()
9. 获取文字信息框
10. 调用轮播
//方法
1. 补全页面
1> 左按钮
1… 创建span
2… 添加内容 <
3… 添加id
4… 添加到大盒子中
2> 右按钮
1… 创建span
2… 添加内容 >
3… 添加id
4… 添加到大盒子中
3> 文字信息框
1… 创建div
2… 添加id
3… 添加到大盒子中
4> 小圆点 ol li
1… 创建ol
2… 创建一个空数组
3… 创建li
4… 将li添加到ol中
5… 将li添加到数组中
6… 将ol添加到大盒子中
返回数组;
2. 添加事件–改变当前下标
1》 左按钮 – 点击 — 当前下标–
if(当前下标 === -1){
当前下标 = length - 1
}
调用轮播
2》 右按钮 – 点击 — 当前下标 ++
if(当前下标 === length){
当前下标 = 0
}
调用轮播
3》小圆点 – 移入
当前下标 = 移入的下标
调用轮播
3. 切换图片
1. 大图
所有大图-- none
当前大图— block
2. 小圆点
所有小圆点—red
当前小圆点–blue
文字信息 = 当前大图.第一个元素子节点.第一个元素子节点.alt
4. 自动轮播
计时器 == 3000
当前下标 ++
if(当前下标 === length){
当前下标 = 0
}
调用轮播
大盒子=== 移入事件 === 清除计时器
大盒子=移出事件===开始自动轮播
*/
1.HTML代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" type="text/css" href="css/index.css"/>
<script src="js/index.js"></script>
</head>
<body>
<div id="slide1" class="container">
<ul>
<li><a href="http://www.1000phone.com"><img src="img/1.jpg" alt="文字1"/></a></li>
<li><a href="http://www.1000phone.com"><img src="img/2.jpg" alt="文字2"/></a></li>
<li><a href="http://www.1000phone.com"><img src="img/3.jpg" alt="文字3"/></a></li>
<li><a href="http://www.1000phone.com"><img src="img/4.jpg" alt="文字4"/></a></li>
</ul>
</div>
<script type="text/javascript">
var s = new Slider("#slide1");
console.info(s);
</script>
</body>
</html>
2.CSS代码
ul,ol,li{
padding: 0;
margin: 0;
list-style: none;
}
.container{
width: 500px;
height: 300px;
margin: 50px auto;
position: relative;
}
#msg{
width: 100%;
height: 40px;
line-height: 40px;
text-indent: 10px;
position: absolute;
bottom: 0px;
left: 0;
color: white;
font-size: 16px;
background: rgba(0,0,0,.8);
cursor: pointer;
z-index: 1;
}
ul li a {
display: block;
}
img{
width: 500px;
height: 300px;
}
ol{
position: absolute;
bottom: 10px;
left: 50%;
-webkit-transform: translateX(-50%);
background: rgba(255,255,255,.6);
border-radius: 7px;
padding: 3px;
z-index: 2;
}
ol li{
background: red;
float: left;
width: 8px;
height: 8px;
margin-left: 5px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
margin-right: 7px;
}
span{
width: 30px;
height: 45px;
line-height: 45px;
font-size: 40px;
color: white;
background: rgba(255,255,255,.3);
cursor: pointer;
position: absolute;
font-weight: bold;
top: 50%;
left: 0;
-webkit-transform: translateY(-50%);
-moz-transform:translateY(-50%);
-webkit-transition: all 1s ease 0s;
}
#rtBtn{
right: 0;
left: auto;
}
span:hover{
-webkit-transform: rotateY(40deg) translateX(-3px) scale(1.2);
}
3.JS代码
/*
轮播:
核心: 当前下标
方式:大图 display 小圆点 backgroundColor
属性:
1. 获取大盒子
2. 获取大图(ul_li)
3. 计算大图数量
4. 创建并返回所有的小圆点 = 补全页面()
5. 获取左按钮
6. 获取右按钮
7. 当前下标 = 0
8. 添加事件()
9. 获取文字信息框
10. 调用轮播
//方法
1. 补全页面
1> 左按钮
1.. 创建span
2.. 添加内容 <
3.. 添加id
4.. 添加到大盒子中
2> 右按钮
1.. 创建span
2.. 添加内容 >
3.. 添加id
4.. 添加到大盒子中
3> 文字信息框
1.. 创建div
2.. 添加id
3.. 添加到大盒子中
4> 小圆点 ol li
1.. 创建ol
2.. 创建一个空数组
3.. 创建li
4.. 将li添加到ol中
5.. 将li添加到数组中
6.. 将ol添加到大盒子中
返回数组;
2. 添加事件--改变当前下标
1》 左按钮 -- 点击 --- 当前下标--
if(当前下标 === -1){
当前下标 = length - 1
}
调用轮播
2》 右按钮 -- 点击 --- 当前下标 ++
if(当前下标 === length){
当前下标 = 0
}
调用轮播
3》小圆点 -- 移入
当前下标 = 移入的下标
调用轮播
3. 切换图片
1. 大图
所有大图-- none
当前大图--- block
2. 小圆点
所有小圆点---red
当前小圆点--blue
文字信息 = 当前大图.第一个元素子节点.第一个元素子节点.alt
4. 自动轮播
计时器 == 3000
当前下标 ++
if(当前下标 === length){
当前下标 = 0
}
调用轮播
大盒子=== 移入事件 === 清除计时器
大盒子===移出事件=====开始自动轮播
*/
class Slider{
constructor(selector){
//属性
// 1. 获取大盒子
this.big_box = $('div');
// console.log(big_box);
// 2. 获取大图(ul_li)
this.big_img = this.big_box.children[0].children;
// 3. 计算大图数量
this.num = this.big_img.length;
// 4. 创建并返回所有的小圆点 = 补全页面()
this.sml_cir = this.addEle();
// 5. 获取左按钮
this.lt_btn = $('#ltBtn');
// 6. 获取右按钮
this.gt_btn = $('#rtBtn');
// 7. 当前下标 = 0
this.index_cur = 0;
// 8. 添加事件()
this.addEvent();
// 9. 获取文字信息框
this.o_div = $('#msg');
// 10. 调用轮播
this.slider();
// 11. 计时器返回值
this.timer = null;
// 12. 调用自动轮播
this.autoPlay();
}
addEle(){
// 1. 补全页面
// 1> 左按钮
// 1.. 创建span
let lt_btn = document.createElement('span');
// 2.. 添加内容 <
lt_btn.innerHTML = '<';
// 3.. 添加id
lt_btn.id = 'ltBtn';
// 4.. 添加到大盒子中
this.big_box.appendChild(lt_btn);
// 2> 右按钮
// 1.. 创建span
let gt_btn = document.createElement('span');
// 2.. 添加内容 >
gt_btn.innerHTML = '>';
// 3.. 添加id
gt_btn.id = 'rtBtn';
// 4.. 添加到大盒子中
this.big_box.appendChild(gt_btn);
// 3> 文字信息框
// 1.. 创建div
let o_div = document.createElement('div');
// 2.. 添加id
o_div.id = 'msg';
// 3.. 添加到大盒子中
this.big_box.appendChild(o_div);
// 4> 小圆点 ol li
// 1.. 创建ol
let ol = document.createElement('ol');
// 2.. 创建一个空数组
let arr = [];
// 3.. 创建li
// 4.. 将li添加到ol中
for(let i = 0,len = this.num;i < len;i ++){
let li = document.createElement('li');
ol.appendChild(li);
// 5.. 将li添加到数组中
arr.push(li);
// console.log(arr);
}
// 6.. 将ol添加到大盒子中
this.big_box.appendChild(ol);
// 返回数组;
return arr;
}
addEvent(){
// 2. 添加事件--改变当前下标
// 1》 左按钮 -- 点击 --- 当前下标--
// if(当前下标 === -1){
// 当前下标 = length - 1
// }
// 调用轮播
this.lt_btn.onclick = function(){
this.index_cur --;
if(this.index_cur === -1){
this.index_cur = num - 1;
}
this.slider();
}.bind(this);
// 2》 右按钮 -- 点击 --- 当前下标 ++
// if(当前下标 === length){
// 当前下标 = 0
// }
// 调用轮播
this.gt_btn.onclick = function(){
this.index_cur ++;
if(this.index_cur === this.num){
this.index_cur = 0;
}
this.slider();
}.bind(this);
// 3》小圆点 -- 移入
// 当前下标 = 移入的下标
// 调用轮播
for(let i = 0;i < this.num;i ++){
this.sml_cir[i].onmouseenter = function(){
this.index_cur = i;
this.slider();
}.bind(this);
}
}
slider(){
// 3. 切换图片
// 1. 大图
// 所有大图-- none
// 当前大图--- block
// 2. 小圆点
// 所有小圆点---red
// 当前小圆点--blue
// 文字信息 = 当前大图.第一个元素子节点.第一个元素子节点.alt
for(let i = 0;i < this.num;i ++){
//所有大图隐藏
this.big_img[i].style.display = 'none';
//所有小圆点默认红色
this.sml_cir[i].style.background = 'red';
}
//当前大图出现
this.big_img[this.index_cur].style.display = 'block';
// 当前小圆点变为蓝色
this.sml_cir[this.index_cur].style.background = 'blue';
//显示当前文本信息
this.o_div.innerText = this.big_img[this.index_cur].firstElementChild.firstElementChild.alt;
}
autoPlay(){
// 4. 自动轮播
// 计时器 == 3000
// 当前下标 ++
// if(当前下标 === length){
// 当前下标 = 0
// }
// 调用轮播
this.timer = setInterval(() => {
this.index_cur ++;
if(this.index_cur === this.num){
this.index_cur = 0;
}
this.slider();
}, 3000);
// 大盒子=== 移入事件 === 清除计时器
// 大盒子===移出事件=====开始自动轮播
this.big_box.onmouseenter = function(){
clearInterval(this.timer);
}.bind(this);
this.big_box.onmouseleave = function(){
this.autoPlay();
}.bind(this);
}
}
function $(selector){
return document.querySelector(selector);
}
效果
烟花效果
思路
/*
document === 点击事件 ==== 获取鼠标的坐标值1. 火花 创建火花 添加类名 添加到页面 定位坐标值 left = 鼠标.x top = document.documentElement.clientHeight - 50 向上运动(运动框架) 结束==火花消失==爆炸 2. 爆炸 1. 计算碎片数量 2. 通过数量创建对烟花 3. 封装类 class Spark{ constructor(鼠标坐标){ //属性 this.坐标 = 鼠标坐标 //初始化方法 this.init(); } 方法 init(){ //1. 创建烟花 //2. 添加到页面 //3. 设置坐标值 //4. 设置颜色 //5. 设置大小 //6. 设置速度(x,y) //烟花运动 } sport(){ 计时器 烟花.style.left = 烟花.style.top = if(烟花落地){ 烟花消失 计时器停止 } } } */
代码
<!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>
body{
background: black;
}
.fire{
width: 10px;
height: 10px;
background: white;
position: absolute;
}
</style>
</head>
<body>
<script src="js/sport.js"></script>
<script>
/*
document === 点击事件 ==== 获取鼠标的坐标值
1. 火花
创建火花
添加类名
添加到页面
定位坐标值
left = 鼠标.x
top = document.documentElement.clientHeight - 50
向上运动(运动框架)
结束==火花消失==爆炸
2. 爆炸
1. 计算碎片数量
2. 通过数量创建对烟花
3. 封装类
class Spark{
constructor(鼠标坐标){
//属性
this.坐标 = 鼠标坐标
//初始化方法
this.init();
}
方法
init(){
//1. 创建烟花
//2. 添加到页面
//3. 设置坐标值
//4. 设置颜色
//5. 设置大小
//6. 设置速度(x,y)
//烟花运动
}
sport(){
计时器
烟花.style.left =
烟花.style.top =
if(烟花落地){
烟花消失
计时器停止
}
}
}
*/
document.onclick = function(evt){
let e = evt || window.event;
fnFire({x : e.pageX,y : e.pageY});
}
//创建火花
function fnFire(target){
//1. 创建
let div = document.createElement('div');
//2. 添加类名
div.className = 'fire';
//3. 添加到页面
document.body.appendChild(div);
//4. 定位坐标
div.style.left = target.x + 'px';
div.style.top = document.documentElement.clientHeight - 50 + 'px';
sport_14(div,{top : target.y},()=>{
//消失
div.remove(target);
//调用爆炸
boom(target);
})
}
function boom(target){
//数量
this.num = randomInt(50,80);
for(let i = 0;i < this.num;i ++){
new Spark(target);
}
}
function randomInt(min,max){
return Math.floor(Math.random() * (max - min + 1) + min);
}
class Spark{
constructor(target){
this.target = target;
this.init();
}
init(){
//1. 创建烟花
this.ele = document.createElement('div');
//2. 添加到页面
document.body.appendChild(this.ele);
//3. 设置坐标值
this.ele.style.position = 'absolute';
this.ele.style.left = this.target.x + 'px';
this.ele.style.top = this.target.y + 'px';
//4. 设置颜色
this.ele.style.background = '#' + Math.floor(Math.random() * 0xffffff).toString(16);
//5. 设置大小
this.ele.style.width = randomInt(5,10) + 'px';
this.ele.style.height = randomInt(5,10) + 'px';
//6. 设置速度(x,y)
this.speed_x = Math.random() >= 0.5 ? randomInt(5,10) : -randomInt(5,10);
this.speed_y = Math.random() >= 0.5 ? randomInt(5,10) : -randomInt(5,10);
//烟花运动
this.sport();
}
sport(){
this.timer = setInterval(() => {
this.ele.style.left = this.ele.offsetLeft + this.speed_x + 'px';
this.ele.style.top = this.ele.offsetTop + this.speed_y ++ + 'px';
if(this.ele.offsetTop >= document.documentElement.clientHeight){
this.ele.remove();
clearInterval(this.timer);
}
}, 30);
}
}
</script>
</body>
</html>