I've tried to add two event listeners into my external script, both of which worked fine as event attributes attached to HTML elements.
The event listeners are:
parent.addEventListener("mousemove", where(event));
parent.addEventListener("mouseleave", reset(event));
The rest of the code can be seen here: https://codepen.io/rowancavanagh/pen/NBmPGv Or here in the snippet:
window.onload = function() {
var parent = document.querySelectorAll(".shadowed");
var shadow = document.createElement("div");
for (var i = 0; i < parent.length; i++) {
parent[i].appendChild(shadow);
}
parent.addEventListener("mousemove", where(event));
parent.addEventListener("mouseleave", reset(event));
}
function where(e) {
var x = e.offsetX / e.target.offsetWidth * 10 - 5;
var y = e.offsetY / e.target.offsetHeight * 10 - 5;
e.target.querySelector('.shadowed div').style.transform = 'translateX(' + x + 'px) translateY(' + y + 'px)';
}
function reset(e) {
e.target.querySelector('.shadowed div').style.transform = 'translateX(0px) translateY(0px)';
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html, body {
height: 100%;
}
body {
background-color: #eee;
display: flex;
justify-content: center;
align-items: center;
}
.shadowed {
position: relative;
width: 400px;
height: 240px;
margin: 10px;
background-color: #fff;
border-radius: 5px;
}
.shadowed div {
position: absolute;
bottom: 0;
right: 0;
margin: 0 -10px -10px 0;
width: calc(100% - 40px);
height: calc(100% - 40px);
background-color: #ddd;
border-radius: 5px;
z-index: -1;
transform: translateY(0px) translateX(0px);
transition: transform .1s ease-out;
}
<div class="shadowed"></div>
As you can see, they should be firing a couple of functions on mousemove and mouseleave, but aren't.
Any ideas what I'm doing wrong?