22.4.24 腾讯前端笔试题 放大镜

考察:dom元素的获取,dom元素属性的动态设置,鼠标事件监听,元素宽高的获取,元素位置的获取与设置

元素:
一张小图normal > img,一张大图big > img,一个放大镜lay。

思路:鼠标的事件监听。
mouseover => 鼠标进入小图区域,显示放大镜和大图;
mouseout => 鼠标离开小图区域,隐藏放大镜和大图;
mousemove => 根据鼠标移动的位置,对放大镜和大图进行移动。

设置mouseover mouseout 监听器的代码如下:
normalDiv.addEventListener('mouseover', () => {
    // TODO: 放大镜、被放大的图片都显示,渲染为块级元素
    normalSpan.style.display = 'block';
    bigDiv.style.display = 'block';
})

normalDiv.addEventListener('mouseout', () => {
    // TODO: 放大镜、被放大的图片都隐藏,不渲染
    normalSpan.style.display = 'none';
    bigDiv.style.display = 'none';
})

mousemove 的响应函数如下:
moveHandler(event, normalDiv, normalSpan, bigImg) {
    // tip: 该函数处理放大镜、被放大的图片的显示区域,x、y分别为鼠标在该模块中的位置坐标
    const scale = 2
    let x = event.clientX - (normalSpan.offsetWidth / 2)
    let y = event.clientY - (normalSpan.offsetHeight / 2)
    
    // TODO: 判断临界值,重新设置放大镜、被放大的图片的位置
    // 判断临界值
    if(x < 0) {
        x = 0;
    } 
    if(x > normalDiv.clientWidth - normalSpan.offsetWidth) {
        x = normalDiv.clientWidth - normalSpan.offsetWidth;
    }

    if(y < 0) {
        y = 0;
    } 
    if(y > normalDiv.clientHeight - normalSpan.offsetHeight) {
        y = normalDiv.clientHeight - normalSpan.offsetHeight;
    }

    // 移动放大镜和放大图片的位置
    normalSpan.style.left = x + 'px';
    normalSpan.style.top = y + 'px';
    bigImg.style.left = -scale * x + 'px';
    bigImg.style.top = -scale * y + 'px';

}

注:用鼠标位置(event.clientX)减去放大镜的边宽/2(normalSpan.offsetWidth / 2)表示放大镜的位置,以此判断放大镜是否在可移动区域内。

#腾讯##笔试题目#
全部评论
写的很详细。
点赞 回复 分享
发布于 2022-04-27 18:00

相关推荐

废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
2 11 评论
分享
牛客网
牛客企业服务