Web APIs-2023.4.9

回顾

回顾

如果想让页面的滚动是一种平滑的方式,需要增加如下css样式

如果想让页面的滚动是一种平滑的方式,需要增加如下css样式

 // 如果想让页面的滚动是一种平滑的方式,需要增加如下css样式
      body, html {
            scroll - behavior: smoth;
         }
mouseenter和mouseleave没有冒泡 所以不能事件委托 不能从ul冒泡到li

mouseenter和mouseleave没有冒泡 所以不能事件委托 不能从ul冒泡到li
// mouseenter和mouseleave这两个事件是没有冒泡的
// mouseover和mouseout这两个事件是有冒泡的

   // mouseenter和mouseleave没有冒泡   所以不能事件委托  不能从ul冒泡到li
      // mouseenter和mouseleave这两个事件是没有冒泡的
     // mouseover和mouseout这两个事件是有冒泡的
        smallUI.addEventListener('mouseover', function () {

        })


        smallUI.addEventListener('mouseout', function () {

        })
放大镜案例

放大镜案例

页面滚动时用pageY 是 距离页面最上沿的位置

pageY

实战案例
  <script>
        //  1.滚动相关
        // 代码的两部分:代码的功能 代码执行的时机
        // 监听页面的滚动事件: 得到最新滚出去的距离

        // 如果想让页面的滚动是一种平滑的方式,需要增加如下css样式
        // body, html {
        //     scroll - behavior: smoth;
        //   
        // }
        const elevator = document.querySelector('.xtx-elevator')
        window.addEventListener('scroll', function () {
            const scrollTop = document.documentElement.scrollTop
            if (scrollTop > 1000) {
                elevator.style.opacity = 1
            }
            else {
                elevator.style.opacity = 0
            }
        })

        document.querySelector('#backTop').addEventListener('click', function () {
            // document.documentElement.scrollTop=0
            console.log('返回顶部')
            window.screenTop(0, 0)
        })
        // 2.tab栏切换相关
        const smallUI = document.querySelector('.small ul')
        const middleImg = document.querySelector('.middle img')
        // mouseenter和mouseleave没有冒泡   所以不能事件委托  不能从ul冒泡到li
        // mouseenter和mouseleave这两个事件是没有冒泡的
        // mouseover和mouseout这两个事件是有冒泡的
        smallUI.addEventListener('mouseover', function (e) {
            if (e.target.tagName === 'IMG') {
                document.querySelector('.small ul li.active').classList.remove('active')
                //    parentNode:父元素
                e.target.parentNode.classList.add('active')
                // 中间图片变化
                middleImg.src = e.target.src
                // 大图也需要变化
                largerDiv.style.backgroundImage = `url(${e.target.src})`
            }
        })

        // 鼠标离开 图片大图消失 什么都不用做  就不用写了
        // smallUI.addEventListener('mouseout', function () {

        // })

        const firstDD = document.querySelector('.attrs .item:nth-child(1) .dd')
        const secondDD = document.querySelector('.attrs .item:nth-child(2) .dd')
        firstDD.addEventListener('click', function (e) {
            if (e.target.tagName === 'IMG') {
                //① this.querySelector('active').classList.remove('active')
                // this= ('.attrs .item:nth-child(1) .dd img.active')
                // ②document.querySelector('.attrs .item:nth-child(1) .dd img.active').classList.remove('active')
                // ③
                const activeImg = document.querySelector('.attrs .item:nth-child(1) .dd img.active')
                activeImg.classList.remove('active')

                e.target.classList.add('active')
            }
        })

        secondDD.addEventListener('click', function (e) {
            if (e.target.tagName === 'SPAN') {
                // ①this.querySelector('active').classList.remove('active')
                // this= ('.attrs .item:nth-child(2) .dd img.active')
                //② document.querySelector('.attrs .item:nth-child(2) .dd img.active').classList.remove('active')
                //③
                const activeSpan = document.querySelector('.attrs .item:nth-child(2) .dd span.active')
                activeSpan.classList.remove('active')

                e.target.classList.add('active')
            }
        })

        const tabHead = document.querySelector('.tab-head')
        const panels = document.querySelectorAll('.tab-pane')
        tabHead.addEventListener('click', function (e) {
            if (e.target.tagName === 'A') {
                document.querySelector('.tab-head a.active').classList.remove('active')
                e.target.classList.add('active')
                // 将这个标题对应的内容显示出来, 其他的内容隐藏起来
                // 全部隐藏  干掉所有人, 复活我自己 
                for (let i = 0; i < panels.length; i++) {
                    panels[i].style.display = 'none'
                }
                panels[e.target.dataset.index].style.display = 'block'

            }
        })



        // 3.图片放大相关
        const middleDiv = document.querySelector('.middle')
        const layerDiv = document.querySelector('.layer')
        const largeDiv = document.querySelector('.large')

        middleDiv.addEventListener('mouseenter', function () {
            layerDiv.style.display = 'block'
        })
        middleDiv.addEventListener('mouseleave', function () {
            layerDiv.style.display = 'none'
        })

        middleDiv.addEventListener('mousemove', function (e) {
            // e.offsetX/e.clientX/e.pageX
            // 控制layerDiv的位置
            let targetX = e.clientX - middleDiv.parentNode.offsetLeft - layerDiv.offsetWidth / 2
            // 元素.offsetLeft 距离带定位父元素左沿的距离
            let targetY = e.clientY - middleDiv.parentNode.offsetTop - layerDiv.offsetHeight / 2

            if (targetX < 0) {
                targetX = 0
            }

            if (targetX > middleDiv.offsetWidth - layerDiv.offsetWidth) {
                targetX = middleDiv.offsetWidth - layerDiv.offsetWidth
            }

            if (targetY < 0) {
                targetY = 0
            }

            if (targetY > middleDiv.offsetHeight - layerDiv.offsetHeight) {
                targetY = middleDiv.offsetHeight - layerDiv.offsetHeight
            }
            layerDiv.style.left = `${targetX}px`
            layerDiv.style.top = `${targetY}px`

            largeDiv.style.backgroundPositionX = -targetX * 2 + 'px'
            largeDiv.style.backgroundPositionY = -targetY * 2 + 'px'
        })
    </script>
渲染界面
const arr = [{
    content: '今天要吃个大汉堡',
    done: false
},
{
    content: '复习本地存储的知识点',
    done: true
},
{
    content: '今天要吃定这个实战',
    done: false
}
]
// 1.使用数据渲染界面
let temp = 0
let todolist = document.querySelector('#todolist')
render()

function render() {
    // 列表的渲染


    for (let i = 0; i < arr.length; i++) {
        // 重新渲染之前清空
        todolist.innerHTML = ''
        const newLi = document.createElement('li')
        if (arr[i].done === true) {
            temp++
            newLi.classList.add('completed')
            newLi.innerHTML = `<input type="checkbox" checked>
                                        <p>${arr[i].content} </p>
                                        <a href="javascript:;"></a>`
        } else {
            newLi.innerHTML = `<input type="checkbox">
                                        <p>${arr[i].content} </p>
                                        <a href="javascript:;"></a>`
        }
        todolist.appendChild(newLi)
    }
}

// 数量显示的渲染
// ①  let temp = 0
document.querySelector('#total').innerHTML = arr.length
document.querySelector('#done').innerHTML = temp
document.querySelector('#undone').innerHTML = arr.length - temp

// ②
const doneCount = document.querySelectorAll('input:checked').length
document.querySelector('#total').innerHTML = arr.length
document.querySelector('#done').innerHTML = doneCount
document.querySelector('#undone').innerHTML = arr.length - doneCount

// ③
const newArr = arr.filter(function (e) {
    return e.done
})
document.querySelector('#total').innerHTML = arr.length
document.querySelector('#done').innerHTML = newArr
document.querySelector('#undone').innerHTML = arr.length - newArr

// 数量显示的渲染
// ①  let temp = 0
// document.querySelector('#total').innerHTML = arr.length
// document.querySelector('#done').innerHTML = temp
// document.querySelector('#undone').innerHTML = arr.length - temp

// ②
// const doneCount = document.querySelectorAll('input:checked').length
// document.querySelector('#total').innerHTML = arr.length
// document.querySelector('#done').innerHTML = doneCount
// document.querySelector('#undone').innerHTML = arr.length - doneCount

// ③
const newArr = arr.filter(function (e) {
    return e.done
})
document.querySelector('#total').innerHTML = arr.length
document.querySelector('#done').innerHTML = newArr
document.querySelector('#undone').innerHTML = arr.length - newArr


trim() 将字符串左右两边的空格去掉

字符串中,有一个方法叫做trim() 将字符串左右两边的空格去掉
trim()

复习

复习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值