侧边栏壁纸
  • 累计撰写 57 篇文章
  • 累计创建 23 个标签
  • 累计收到 4 条评论

50projects50days知识点-29-double-click-heart

cluski
2023-03-30 / 0 评论 / 0 点赞 / 131 阅读 / 330 字
温馨提示:
本文最后更新于 2023-03-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

    示例网址:

    https://50projects50days.com/projects/github-profiles/
    http://50projects.tc.cluski.top/50projects50days/github-profiles/

    效果:

    double-click-heart

    思路:

    布局什么不难,做鼠标双击的处理的时候,可以给这个元素加上一个click事件,当前后两次点击的时间差在800ms之内的话,就是双击。然后创建一个div元素,加上对应class之后,加入到父元素下。

    整体的js代码如下:

    const loveMe = document.querySelector('.loveMe')
    const times = document.querySelector('#times')
    
    let clickTime = 0
    let timesClicked = 0
    
    loveMe.addEventListener('click', (e) => {
        if(clickTime === 0) {
            clickTime = new Date().getTime()
        } else {
            // 如果两次点击相隔在800ms之内的话,就算是双击
            if((new Date().getTime() - clickTime) < 800) {
                createHeart(e)
                clickTime = 0
            } else {
                // 否则,记录下当前的点击时间爱
                clickTime = new Date().getTime()
            }
        }
    })
    
    const createHeart = (e) => {
        const heart = document.createElement('i')
        // 给新创建的元素加上对应的class
        heart.classList.add('fas')
        heart.classList.add('fa-heart')
    
        const x = e.clientX
        const y = e.clientY
    
        const leftOffset = e.target.offsetLeft
        const topOffset = e.target.offsetTop
    
        // 获取元素在父元素内的位置坐标
        const xInside = x - leftOffset
        const yInside = y - topOffset
    
        heart.style.top = `${yInside}px`
        heart.style.left = `${xInside}px`
    
        loveMe.appendChild(heart)
    
        times.innerHTML = ++timesClicked
    
        // 1000ms之后删除此元素
        setTimeout(() => heart.remove(), 1000)
    }
    

    📌 js中获取当前时间的时间戳:new Date().getTime()

    0

    评论区