微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更新鼠标移动时的视差以做出响应

如何解决更新鼠标移动时的视差以做出响应

我想在没有任何插件的mousemove上创建可响应的视差效果。因此,其想法是在mousemove事件中使英雄部分中的某些元素稍微移动。我已经根据我在此Codepen上找到的代码创建了这种效果 https://codepen.io/vahidseo/pen/qahfL

   window.onload = function () {

   var parallaxBox = document.getElementById ( 'Box' );
   var c1left = document.getElementById ( 'l1' ).offsetLeft,c1top = document.getElementById ( 'l1' ).offsetTop,c2left = document.getElementById ( 'l2' ).offsetLeft,c2top = document.getElementById ( 'l2' ).offsetTop,c3left = document.getElementById ( 'l3' ).offsetLeft,c3top = document.getElementById ( 'l3' ).offsetTop,c4left = document.getElementById ( 'l4' ).offsetLeft,c4top = document.getElementById ( 'l4' ).offsetTop;

    parallaxBox.onmousemove = function ( event ) {
       event = event || window.event;
       var x = event.clientX - parallaxBox.offsetLeft,y = event.clientY - parallaxBox.offsetTop;
    
       mouseParallax ( 'l1',c1left,c1top,x,y,5 );
       mouseParallax ( 'l2',c2left,c2top,15 );
       mouseParallax ( 'l3',c3left,c3top,30 );
       mouseParallax ( 'l4',c4left,c4top,65 );
    }

    }

 function mouseParallax ( id,left,top,mouseX,mouseY,speed ) {
    var obj = document.getElementById ( id );
    var parentObj = obj.parentNode,containerWidth = parseInt( parentObj.offsetWidth ),containerHeight = parseInt( parentObj.offsetHeight );
        obj.style.left = left - ( ( ( mouseX - ( parseInt( obj.offsetWidth ) / 2 + left ) ) / containerWidth ) * speed ) + 'px';
        obj.style.top = top - ( ( ( mouseY - ( parseInt( obj.offsetHeight ) / 2 + top ) ) / containerHeight ) * speed ) + 'px';}

我进行了一些更改,以使其适合我的需求并适用于指定的任何数量的元素。

现在的问题是我无法使其响应。我尝试实现窗口调整大小事件,但无法使其与其余代码一起使用。有人可以帮我吗?

    window.onload = () => {
    let parallaxBox = document.getElementById ( 'Box' );
    let layers = document.querySelectorAll('.layer');
    
    window.addEventListener('resize',startParallax);

    function startParallax() {
        layers.forEach((layer) => {
            let oL,oT,s;
            oL = layer.offsetLeft;
            oT = layer.offsetTop;
            s = parseInt(layer.dataset.speed);
            parallaxBox.addEventListener('mousemove',( event ) => {
                event = event || window.event;
                let x = event.clientX - parallaxBox.offsetLeft,y = event.clientY - parallaxBox.offsetTop;
                mouseParallax ( layer,oL,s );
            })
        })
    }
    startParallax()
}

function mouseParallax ( obj,speed ) {
    let parentObj = obj.parentNode,containerHeight = parseInt( parentObj.offsetHeight );

    obj.style.left = left - ( ( ( mouseX - ( parseInt( obj.offsetWidth ) / 2 + left ) ) / containerWidth ) * speed ) + 'px';
    obj.style.top = top - ( ( ( mouseY - ( parseInt( obj.offsetHeight ) / 2 + top ) ) / containerHeight ) * speed ) + 'px';
}

这是我的榜样 https://jsfiddle.net/janchey/ndy7zjsL/2/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。