Web APIS 第五天
滚动事件
window . addEventListener ( 'scroll' , function(){})
加载事件
加载外部资源(如图片、外联CSS和JavaScript等)加载完毕时触发的事件
window . addEventListener ( 'load' , function(){})
注意:不光可以监听整个页面资源加载完毕,也可以针对某个资源绑定load事件
案例 : 右侧导航栏
<script>
// 1. 获元取素
let items = document.querySelectorAll('.item')
// 内容的盒子获取
let neirongs = document.querySelectorAll('.neirong')
// 2. 左侧aside 模块 点击谁,谁高亮
for (let i = 0; i < items.length; i++) {
items[i].addEventListener('click', function () {
// 找到上一个active 移除类
document.querySelector('.aside .active').classList.remove('active')
// 点击谁谁添加类
this.classList.add('active')
// 3. 右侧内容跟随走动 让页面滚动到对应的offsetTop值位置
// console.log(neirongs[i].offsetTop) 不用给单位
document.documentElement.scrollTop = neirongs[i].offsetTop
})
}
</script>
案例 : 仿京东固定头部练习
<script>
let sk = document.querySelector('.sk')
let header = document.querySelector('.header')
// 1. 页面滚动事件
window.addEventListener('scroll', function () {
// console.log(11)
// 要检测滚动的距离
// console.log(document.documentElement.scrollTop)
// console.log(sk.offsetTop)
// 2. 要检测滚动的距离 >= 秒杀模块的offsetTop 则滑入
if (document.documentElement.scrollTop >= sk.offsetTop) {
// alert('改吃饭了')
header.style.top = '0'
} else {
header.style.top = '-80px'
}
})
</script>
轮播图案例
分析:
<script>
let main = document.querySelector('.main')
let lis = document.querySelectorAll('.indicator li')
let pics = document.querySelectorAll('.slides ul li')
let text = document.querySelector('.extra h3')
let next = document.querySelector('.next')
let prev = document.querySelector('.prev')
// 需求一 鼠标经过小图标, 高亮
for (let i = 0; i < lis.length; i++){
lis[i].addEventListener('mouseenter',function () {
// 选出唯一的那个active , 删除类
document.querySelector('.indicator .active').classList.remove('active');
// 鼠标经过谁 谁加上active
this.classList.add('active');
// 需求二 鼠标移到该位置大图片也变化
document.querySelector('.slides ul .active').classList.remove('active');
pics[i].classList.add('active')
text.innerHTML = `
第${i+1}张图的描述信息
`
//需求四 解决bug
//点击右侧按钮可以实现播放 下一张, 但是鼠标经过前面的, 播放就会乱序
//解决方案 让变化量 index 重新赋值为 当前鼠标经过的索引号
//鼠标经过了那个小li 他的索引号就是 i
//右侧按钮是通过index 来控制播放
index = i;
})
}
//需求三 右侧按钮点击事件
let index = 0; //全局变量 为了给右侧按钮和左侧按钮同时使用
next.addEventListener('click',function () {
index++;
//选出 index 小图片做操作
index = index % lis.length
common()
})
//需求 左侧按钮点击事件
prev.addEventListener('click',function () {
index--;
// if(index < 0){
// index = 9
// }
index = (lis.length + index)%lis.length
common()
})
//封装一个公共函数
function common() {
document.querySelector('.indicator .active').classList.remove('active');
lis[index].classList.add('active')
//选出 index 大图片做操作
document.querySelector('.slides ul .active').classList.remove('active');
pics[index].classList.add('active');
text.innerHTML = `
第${index+1}张图的描述信息
`
}
let timer = setInterval(function () {
//自动调用右侧按钮的点击事件
next.click()
},1000)
//
main.addEventListener('mouseenter',function () {
clearInterval(timer)
})
main.addEventListener('mouseleave',function () {
timer = setInterval(function () {
next.click()
},1000)
})
</script>