PC端网页特效

PC端网页特效

1. offset系列

在这里插入图片描述

1.2 offset与style的区别

在这里插入图片描述

1.3 拖动模态框效果

  1. css代码
// 注意用到offsetLeft 和 offsetTop时候,返回的是元素相对带有定位父元素的偏移
// 由于控制到盒子的left和top属性,所以需要加绝对定位
 div {
          position: absolute;
          top: 50%;
          left: 50%;
          transform: translate(-50%, -50%);
          width: 200px;
          height: 200px;
          background-color: pink;
          cursor: all-scroll;
     }
  1. js代码
let div = document.querySelector('div');

    div.addEventListener('mousedown', function (e) {
    	// 鼠标按下时,获取鼠标相对于盒子的左侧距离和顶部距离
        let x = e.pageX - div.offsetLeft;
        let y = e.pageY - div.offsetTop;

        let fn = function (e) {
        	// 用鼠标距离页面的距离 减去 鼠标距离盒子的距离 就是盒子相对于页面的距离
            div.style.left = (e.pageX - x) + 'px';
            div.style.top = (e.pageY - y) + 'px';
        }

        document.addEventListener('mousemove', fn)

        document.addEventListener('mouseup', function (e) {
        	// 当鼠标弹起,解除鼠标移动事件
            document.removeEventListener('mousemove', fn);
        })
    })

2. Client系列

在这里插入图片描述

2.1 仿京东放大镜效果

效果图:
在这里插入图片描述

html和css代码

<div class="box">
    <img src="upload/iPhone13.jpg" alt="">
    <div class="mask"></div>
    <div class="big">
        <img src="upload/iPhone13.jpg" alt="">
    </div>
</div>
.box {
        position: relative;
        width: 350px;
        height: 350px;
        border: 1px solid #ccc;
        cursor: all-scroll;
    }
    
.box img {
    	width: 100%;
	}

.mask {
    display: none;
    position: absolute;
    left: 0;
    top: 0;
    width: 200px;
    height: 200px;
    background-color: yellow;
    opacity: .3;
	}

.big {
	    display: none;
	    position: absolute;
	    left: 100%;
	    top: -1px;
	    width: 500px;
	    height: 500px;
	    border: 1px solid #ccc;
	    overflow: hidden;
	}

.big img {
    position: absolute;
    width: 180%;
}

js代码

let box = document.querySelector('.box');
let mask = document.querySelector('.mask');
let big = document.querySelector('.big');

box.addEventListener('mouseover', function() {
    mask.style.display = 'block';
    big.style.display = 'block';
})

box.addEventListener('mouseout', function() {
    mask.style.display = 'none';
    big.style.display = 'none';
})

box.addEventListener('mousemove', function(e) {
    let x = e.pageX - this.offsetLeft - (mask.offsetWidth / 2);
    let y = e.pageY - this.offsetTop - (mask.offsetHeight / 2);
    let maskMax = box.clientWidth - mask.clientWidth; // 150
    if (x <= 0) {
        x = 0;
    } else if (x >= maskMax) {
        x = maskMax;
    }
    if (y <= 0) {
        y = 0;
    } else if (y >= maskMax) {
        y = maskMax;
    }
    mask.style.left = x + 'px';
    mask.style.top = y + 'px';

    // 3. 大图片的移动距离 = 遮挡层移动距离 * 大图片最大移动距离 / 遮挡层的最大移动距离
    let bigImg = big.querySelector('img');
    // 遮挡层最大移动距离
    let maxMove = bigImg.clientWidth - big.clientWidth;
    let moveX = x * maxMove / maskMax;
    let moveY = y * maxMove / maskMax;
    bigImg.style.left = -moveX + 'px';
    bigImg.style.top = -moveY + 'px';
})

3. Scroll系列

在这里插入图片描述

4. 三大系列对比

在这里插入图片描述

  • clientWidth获得的是盒子的宽度
  • scrollWidth获得的是盒子里实际元素的宽度
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值