JS+CSS实现页面滚动切换图片(从边角扩散)的效果

先上效果图:

效果图

实现思路:

两个绝对定位的div重合,通过监听页面滚动位置信息,动态的改变上面的div宽高、背景定位、边角半径

div样式设计:

.bgTrans {
        height: 400px;
        position: relative;
    }

    .bgTrans div {
        position: absolute;

    }

    .bgTrans div.back {
        background-image: url(../images/3.jpg);
        background-repeat: no-repeat;
        background-size: 100% 100%;
        height: 100%;
        width: 100%;
        z-index: 90;
    }

    .bgTrans div.front {
        background-image: url(../images/4.jpg);
        background-position: -100% -100%;
        background-repeat: no-repeat;
        left: 100%;
        top: 400px;
        border-top-left-radius: 100%;
        z-index: 100;
    }

页面滚动监听方法:

window.onscroll = function(event) {
            var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
            var percents;
            if ((div.offsetTop - scrollTop - seeHeight + div.offsetHeight) < 0) {
                if ((div.offsetTop - scrollTop - seeHeight + div.offsetHeight) >= -1 * (seeHeight - div.offsetHeight)) {
                    percents = (div.offsetTop - scrollTop - seeHeight + div.offsetHeight) / (seeHeight - div.offsetHeight) * (-1) * 100;
                } else {
                    percents = 100;
                }
            } else {
                percents = 0;
            }

            // 重置front宽高和位置
            front.style.left = 100 - percents + "%";
            front.style.top = div.offsetHeight - div.offsetWidth * percents / 100 + "px";
            front.style.width = percents + "%";
            front.style.height = div.offsetWidth * percents / 100 + "px";

            // 计算角度,使动画效果更圆滑连贯
            front.style["border-top-left-radius"] = div.offsetWidth * percents / 100 < 
            			div.offsetWidth - div.offsetHeight ? 100+"%":div.offsetWidth - div.offsetHeight+"px";
            front.style["background-position"] = (div.offsetLeft - front.offsetLeft - 8) + "px " +
             (div.offsetLeft - front.offsetTop - 8) + "px";
        }

完整代码持续更新地址:github地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值