{"id":965,"date":"2025-08-19T10:51:23","date_gmt":"2025-08-19T10:51:23","guid":{"rendered":"https:\/\/laywow.com\/animation\/custom-web-cursors\/"},"modified":"2025-09-17T15:05:17","modified_gmt":"2025-09-17T15:05:17","slug":"custom-web-cursors","status":"publish","type":"post","link":"https:\/\/laywow.com\/en\/animations\/custom-web-cursors\/","title":{"rendered":"Custom Web Cursors"},"content":{"rendered":"\n<p>This guide will show you how to integrate a custom web cursor on your sites, customize it, and apply it to different page elements.<\/p>\n\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">Prepare Code Integration<\/h2>\n\n<ol class=\"wp-block-list\">\n<li><strong>Go to your WordPress dashboard.<\/strong><\/li>\n\n\n\n<li>Navigate to <strong>Elementor &gt; Custom Code<\/strong>.<\/li>\n\n\n\n<li>Click on <strong>Add New Code<\/strong>.<\/li>\n\n\n\n<li>Name the code, for example: <em>Custom Cursor<\/em>.<\/li>\n\n\n\n<li>Choose the location <strong><code>&lt;\/body&gt;<\/code> \u2013 End<\/strong> <img decoding=\"async\" width=\"150\" height=\"25\" class=\"wp-image-726\" style=\"width: 150px;\" src=\"https:\/\/laywow.com\/wp-content\/uploads\/2025\/08\/image-1.png\" alt=\"\" srcset=\"https:\/\/laywow.com\/wp-content\/uploads\/2025\/08\/image-1.png 348w, https:\/\/laywow.com\/wp-content\/uploads\/2025\/08\/image-1-300x50.png 300w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/>.<\/li>\n\n\n\n<li>Paste the following code (HTML, CSS, and JS included):<\/li>\n<\/ol>\n\n<pre class=\"wp-block-code\"><code>&lt;script&gt;\ndocument.addEventListener('DOMContentLoaded', function () {\n    let defaultSetting = {\n        size: '1',\n        textColor: '#FFFFFF',\n        backgroundColor: '#FFFFFF',\n        mixBlendMode: 'difference',\n        transitionDuration: '0.3s',\n        cursor: 'inherit',\n    }\n\n    let selectorsSettings = &#91;\n        {\n            selector: '.link-hover',\n            size: '4',\n            textColor: '#FFFFFF',\n            backgroundColor: '#FFFFFF',\n            mixBlendMode: 'difference',\n            transitionDuration: '0.3s',\n            cursor: 'pointer',\n        },\n        {\n            selector: '.article',\n            message: 'Voir',\n            textColor: '#000',\n            backgroundColor: '#FFFFFF',\n            mixBlendMode: 'difference',\n            size: '8',\n            fontSize: '2px',\n            fontFamily: 'sora',\n            transitionDuration: '0.3s',\n            cursor: 'pointer',\n        },\n    ];\n\n    document.body.insertAdjacentHTML('beforeEnd', \"&lt;div class='ehow_mouse'&gt;&lt;div class='ehow_mouse_content'&gt;&lt;\/div&gt;&lt;\/div&gt;\");\n\n    let mouse = document.querySelector('.ehow_mouse');\n    let mouseContent = document.querySelector('.ehow_mouse_content');\n\n    document.addEventListener('mousemove', function(e){\n        mouse.style.transform = `translate3d(${e.clientX}px, ${e.clientY}px, 0)`;\n    });\n\n    if(typeof defaultSetting === 'object'){\n        document.addEventListener('mousemove', setDefault);\n        if(defaultSetting.cursor){\n            document.body.style.cursor = defaultSetting.cursor;\n        }\n    }\n\n    let enteredAreas = &#91;];\n\n    function init(isPopup){\n        selectorsSettings.forEach((setting, i, allSettings) =&gt; {\n            let showMouseHoverElems;\n            if(isPopup){\n                showMouseHoverElems = document.querySelectorAll('.dialog-lightbox-widget ' + setting.selector);\n            } else {\n                showMouseHoverElems = document.querySelectorAll(setting.selector + ':not(.mouse-init)');\n            }\n\n            showMouseHoverElems.forEach(e =&gt; {\n                e.classList.add('mouse-init');\n                e.addEventListener('mouseenter', function() {\n                    enteredAreas.push(i);\n                    updateMouse(setting);\n                });\n                e.addEventListener('mouseleave', function() {\n                    enteredAreas.pop();\n                    if(enteredAreas.length &gt; 0){\n                        updateMouse(allSettings&#91;enteredAreas&#91;enteredAreas.length-1]])\n                    } else if(typeof defaultSetting === 'object'){\n                        updateMouse(defaultSetting)\n                    } else {\n                        mouse.style.setProperty('--mouse-size', 0)\n                    }\n                });\n                if(setting.cursor){\n                    e.style.cursor = setting.cursor;\n                }\n            });\n        });\n    };\n\n    init();\n\n    if(typeof jQuery === 'function'){\n        jQuery(document).on('elementor\/popup\/show', () =&gt; {\n            init(true);\n        });\n    }\n\n    function updateMouse(setting){\n        mouseContent.innerHTML = setting.message || '';\n        mouse.style.setProperty('--mouse-size', setting.size || 1);\n        mouse.style.setProperty('--mouse-text-color', setting.textColor || '#999999');\n        mouse.style.setProperty('--mouse-background-color', setting.backgroundColor || 'transparent');\n        if(setting.image) mouse.style.setProperty('--mouse-background-image', setting.image);\n        if(setting.imageSize) mouse.style.setProperty('--mouse-background-image-size', setting.imageSize);\n        if(setting.border) mouse.style.setProperty('--mouse-border', setting.border);\n        if(setting.borderRadius) mouse.style.setProperty('--mouse-border-radius', setting.borderRadius);\n        if(setting.mixBlendMode) mouse.style.setProperty('--mouse-mix-blend-mode', setting.mixBlendMode);\n        if(setting.filter) mouse.style.setProperty('--mouse-filter', setting.filter);\n        if(setting.fontSize) mouse.style.setProperty('--mouse-font-size', setting.fontSize);\n        if(setting.fontFamily) mouse.style.setProperty('--mouse-font-family', setting.fontFamily);\n        if(setting.transitionDuration) mouse.style.setProperty('--mouse-transition-duration', setting.transitionDuration);\n        if(setting.backDropFilter) mouse.style.setProperty('--mouse-backdrop', setting.backDropFilter);\n    }\n});\n&lt;\/script&gt;\n\n&lt;style&gt;\n@media (hover: hover) {\n    .ehow_mouse {\n        position: fixed;\n        top: 0; left: 0;\n        z-index: 999999;\n        pointer-events: none;\n        will-change: transform;\n        mix-blend-mode: var(--mouse-mix-blend-mode, none);\n    }\n    .ehow_mouse .ehow_mouse_content {\n        position: absolute;\n        top: -24px; left: -24px;\n        width: 48px; height: 48px;\n        transform: scale(var(--mouse-size, 1));\n        background-image: var(--mouse-background-image, none);\n        background-color: var(--mouse-background-color, transparent);\n        background-repeat: no-repeat;\n        background-position: center center;\n        background-size: var(--mouse-background-image-size, 50%);\n        border: var(--mouse-border, none);\n        border-radius: var(--mouse-border-radius, 50%);\n        filter: var(--mouse-filter, none);\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        font-size: var(--mouse-font-size, 12px);\n        font-family: var(--mouse-font-family, inherit);\n        color: var(--mouse-text-color, transparent);\n        text-align: center;\n        transition: transform var(--mouse-transition-duration, 0.3s) ease-in-out, background-color var(--mouse-transition-duration, 0.3s);\n        backdrop-filter: var(--mouse-backdrop);\n        -webkit-backdrop-filter: var(--mouse-backdrop);\n    }\n}\n&lt;\/style&gt;<\/code><\/pre>\n\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">Customize the Cursor<\/h2>\n\n<h3 class=\"wp-block-heading\"><strong>Configuration Objects<\/strong><\/h3>\n\n<ul class=\"wp-block-list\">\n<li><code>defaultSetting<\/code> : defines the default cursor across the entire page.<\/li>\n\n\n\n<li><code>selectorsSettings<\/code> : defines the cursor on specific elements via <strong>CSS selectors<\/strong>.<\/li>\n<\/ul>\n\n<h3 class=\"wp-block-heading\"><strong>Available Properties<\/strong><\/h3>\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Property<\/th><th>Description<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td><code>message<\/code><\/td><td>Text in the center of the cursor<\/td><td><code>'Lire'<\/code><\/td><\/tr><tr><td><code>size<\/code><\/td><td>Cursor size (scale)<\/td><td><code>'2'<\/code><\/td><\/tr><tr><td><code>textColor<\/code><\/td><td>Text color<\/td><td><code>'#FFF'<\/code><\/td><\/tr><tr><td><code>backgroundColor<\/code><\/td><td>Cursor background color<\/td><td><code>'rgba(0,0,0,0.5)'<\/code><\/td><\/tr><tr><td><code>image<\/code><\/td><td>Image or gradient<\/td><td><code>'url(image.svg)'<\/code>  or  <code>'linear-gradient(...)'<\/code><\/td><\/tr><tr><td><code>imageSize<\/code><\/td><td>Image size<\/td><td><code>'50%'<\/code><\/td><\/tr><tr><td><code>border<\/code><\/td><td>Cursor border<\/td><td><code>'3px solid #000'<\/code><\/td><\/tr><tr><td><code>borderRadius<\/code><\/td><td>Corner radius<\/td><td><code>'50%'<\/code><\/td><\/tr><tr><td><code>filter<\/code><\/td><td>CSS effects (e.g., drop-shadow)<\/td><td><code>'drop-shadow(0 0 5px #000)'<\/code><\/td><\/tr><tr><td><code>fontSize<\/code><\/td><td>Text size<\/td><td><code>'12px'<\/code><\/td><\/tr><tr><td><code>fontFamily<\/code><\/td><td>Text font<\/td><td><code>'Roboto'<\/code><\/td><\/tr><tr><td><code>transitionDuration<\/code><\/td><td>Transition duration<\/td><td><code>'0.3s'<\/code><\/td><\/tr><tr><td><code>cursor<\/code><\/td><td>Native cursor<\/td><td><code>'pointer'<\/code>  or  <code>'none'<\/code><\/td><\/tr><tr><td><code>mixBlendMode<\/code><\/td><td>Blend mode<\/td><td><code>'difference'<\/code><\/td><\/tr><tr><td><code>backDropFilter<\/code><\/td><td>Frosted glass effect<\/td><td><code>'blur(25px)'<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">Target Specific Elements<\/h2>\n\n<h3 class=\"wp-block-heading\">Add a CSS Class to an Elementor Widget<\/h3>\n\n<ol class=\"wp-block-list\">\n<li>Open the page with Elementor.<\/li>\n\n\n\n<li>Select the widget you want to target (button, image, section, etc.).<\/li>\n\n\n\n<li>In the left panel, go to <strong>Advanced &gt; CSS Classes<\/strong>.<\/li>\n\n\n\n<li>Add a unique class name, for example:  <code>curseur-personnalise<\/code><\/li>\n<\/ol>\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u26a0\ufe0f Do not add the dot (<code>.<\/code>) here, just the name.<\/p>\n<\/blockquote>\n\n<h3 class=\"wp-block-heading\">Modify the Code to Target this Class<\/h3>\n\n<p>In the <code>selectorsSettings<\/code> array of your script, add an object for this CSS class:<\/p>\n\n<pre class=\"wp-block-code\"><code>{\n    selector: '.curseur-personnalise',  \/\/ le point est obligatoire ici\n    message: 'Voir plus',\n    size: '3',\n    textColor: '#FFF',\n    backgroundColor: '#333',\n    cursor: 'pointer',\n    borderRadius: '50%',\n    transitionDuration: '0.3s'\n}\n<\/code><\/pre>\n\n<ul class=\"wp-block-list\">\n<li><code>selector<\/code> : the CSS class you just created (with a dot in front).<\/li>\n\n\n\n<li><code>message<\/code> : text in the center of the cursor.<\/li>\n\n\n\n<li><code>size<\/code> : cursor size (scale).<\/li>\n\n\n\n<li><code>textColor<\/code>  and <code>backgroundColor<\/code>: colors.<\/li>\n\n\n\n<li><code>cursor<\/code> : native cursor type (&#8220;pointer&#8221;, &#8220;none&#8221;, etc.).<\/li>\n\n\n\n<li><code>borderRadius<\/code> : to round the cursor if needed.<\/li>\n\n\n\n<li><code>transitionDuration<\/code> : animation duration.<\/li>\n<\/ul>\n\n<h2 class=\"wp-block-heading\">Debugging<\/h2>\n\n<ul class=\"wp-block-list\">\n<li>If the cursor does not appear, open the browser console (F12).<\/li>\n\n\n\n<li>Check for syntax errors in <code>defaultSetting<\/code> or <code>selectorsSettings<\/code>.<\/li>\n\n\n\n<li>Ensure correct <strong>commas<\/strong> and <strong>single quotes<\/strong>.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This guide will show you how to integrate a custom web cursor on your sites, customize it, and apply it to different page elements. Prepare Code Integration Customize the Cursor Configuration Objects Available Properties Property Description Example message Text in the center of the cursor &#8216;Lire&#8217; size Cursor size (scale) &#8216;2&#8217; textColor Text color &#8216;#FFF&#8217; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":964,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[25],"tags":[27,26],"class_list":["post-965","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-animations","tag-hover","tag-interactions"],"acf":[],"_links":{"self":[{"href":"https:\/\/laywow.com\/en\/wp-json\/wp\/v2\/posts\/965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/laywow.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/laywow.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/laywow.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/laywow.com\/en\/wp-json\/wp\/v2\/comments?post=965"}],"version-history":[{"count":1,"href":"https:\/\/laywow.com\/en\/wp-json\/wp\/v2\/posts\/965\/revisions"}],"predecessor-version":[{"id":966,"href":"https:\/\/laywow.com\/en\/wp-json\/wp\/v2\/posts\/965\/revisions\/966"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/laywow.com\/en\/wp-json\/wp\/v2\/media\/964"}],"wp:attachment":[{"href":"https:\/\/laywow.com\/en\/wp-json\/wp\/v2\/media?parent=965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/laywow.com\/en\/wp-json\/wp\/v2\/categories?post=965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/laywow.com\/en\/wp-json\/wp\/v2\/tags?post=965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}