简体   繁体   中英

jQuery mouseover doesn't work as expected on document

I would like to have my own cursor only displayed over certain images with a certain class.

I've already written a few lines for that.

Here is my code:

function registerCursorHoverEffect() {
    if (!isTouch()) {
        const el = document.body;
        var cursorDiv = document.createElement("div");
        cursorDiv.setAttribute("id", "cursor");
        cursorDiv.setAttribute("class", "light-spot light-spot--cursor light-spot--center-center light-spot--color-red light-spot--filled light-spot--outside");
        el.before(cursorDiv);

        document.getElementById("cursor").innerHTML = '<svg class="cursor-main" xmlns="http://www.w3.org/2000/svg" width="70" height="70" viewport="0 0 100 100" style="stroke: white; fill:white;font-size:300px; z-index: 9999999;position: absolute; top: 40px; right: 40px; bottom: 0;"><path d="M59.71,31.29l-10-10a1,1,0,0,0-1.42,1.42L56.59,31H5a1,1,0,0,0,0,2H56.59l-8.3,8.29a1,1,0,0,0,0,1.42,1,1,0,0,0,1.42,0l10-10A1,1,0,0,0,59.71,31.29Z"/></svg>';
        var cursorDivAppend = document.createElement("div");
        cursorDivAppend.setAttribute("id", "cursor-append");
        cursorDivAppend.setAttribute("class", "cursor-append");
        el.before(cursorDivAppend);

        // Mousemove
        $(document).on('mousemove', function (event) {
            if($('.col-3:hover').length != 0) {
                const appendScale = 1
                var destinationX = event.pageX;
                var destinationY = event.pageY;
                var transformScale = `translate(calc(${destinationX}px - 50%), calc(${destinationY}px - 50%)) scale(${appendScale})`
                $('#cursor').css('transform', transformScale);
            }
        })
    }
}

The following screenshot shows what is generated when you hover over an image with a certain class:

在此处输入图片说明

The critical part of it all is here:

        // Mousemove
        $(document).on('mousemove', function (event) {
            if($('.col-3:hover').length != 0) {
                const appendScale = 1
                var destinationX = event.pageX;
                var destinationY = event.pageY;
                var transformScale = `translate(calc(${destinationX}px - 50%), calc(${destinationY}px - 50%)) scale(${appendScale})`
                $('#cursor').css('transform', transformScale);
            }
        })

event.pageX should always give me the current mouse position of the $(document) and not of the event itself. Exactly the same for event.pageY . But I always get the current position of the event and I don't know why.

Can somebody help me please?

UPDATE:

However, the width of the cursor element hinders me because I get the coordinates of the $ (documents) . The event is only triggered when I am outside the cursor. Here is a screenshot and to clarify the problem: 在此处输入图片说明

I would like to have my own cursor only displayed over certain images with a certain class.

You can do that only with css,

 .cursors { display: flex; justify-content: flex-start; align-items: stretch; height: 100vh; } .cursors > div { display: flex; justify-content: center; align-items: center; flex-grow: 1; box-sizing: border-box; padding: 10px 2px; text-align: center; } .cursors > div:nth-child(odd) { background: #eee; } .cursors > div:hover { opacity: 0.25; } .png { cursor: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/9632/heart.png"), auto; } .rotated { transform: rotate(45deg); /* Equal to rotateZ(45deg) */ background-color: pink; }
 <div class="cursors"> <div><img class="png rotated"src="https://uxwing.com/wp-content/themes/uxwing/images/patreon_btn.png"/> </div> <div class="gif">GIF</div> </div>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM