Not sure if this is the right place / category but…
I have a Eleventy-generated static web site. I am attempting to use touch events in conjunction with mouse events to close a dropdown if it is open when the user touches an area outside of the dropdown.
<div class="row header-row-2">
<div class="row-2-content">
<button class="dept-btn" id="dept-btn">Departments</button>
<div class="dept-dropdown" id="dept-dropdown"><ul><li><a href="/departments/breathing-apparatus" class="menu-item">Breathing Apparatus</a></li><li><a href="/departments/communications-gear" class="menu-item">Communications Gear</a></li><li><a href="/departments/computer-equipment">Computer Equipment</a><ul><li><a href="/departments/computer-accessories" class="submenu-item">Computer Accessories</a></li><li><a href="/departments/computers" class="submenu-item">Computers</a></li></ul></li><li><a href="/departments/construction">Construction</a><ul><li><a href="/departments/construction-equipment" class="submenu-item">Construction Equipment</a></li><li><a href="/departments/construction-materials" class="submenu-item">Construction Materials</a></li></ul></li><li><a href="/departments/containers" class="menu-item">Containers</a></li><li><a href="/departments/detectors" class="menu-item">Detectors</a></li><li><a href="/departments/emitters" class="menu-item">Emitters</a></li><li><a href="/departments/explosives" class="menu-item">Explosives</a></li><li><a href="/departments/food-and-drinks" class="menu-item">Food and Drinks</a></li><li><a href="/departments/medical-drugs" class="menu-item">Medical, Drugs</a></li><li><a href="/departments/non-breathing-gases" class="menu-item">Non-Breathing Gases</a></li><li><a href="/departments/power-supplies" class="menu-item">Power Supplies</a></li><li><a href="/departments/protections">Protections</a><ul><li><a href="/departments/armor" class="submenu-item">Armor</a></li><li><a href="/departments/cyberware" class="submenu-item">Cyberware</a></li><li><a href="/departments/dress" class="submenu-item">Dress</a></li><li><a href="/departments/suits" class="submenu-item">Suits</a></li><li><a href="/departments/survival-gear" class="submenu-item">Survival Gear</a></li><li><a href="/departments/units" class="submenu-item">Units</a></li></ul></li><li><a href="/departments/robotics">Robotics</a><ul><li><a href="/departments/automatons" class="submenu-item">Automatons</a></li><li><a href="/departments/drones" class="submenu-item">Drones</a></li><li><a href="/departments/robots" class="submenu-item">Robots</a></li><li><a href="/departments/strangeforms" class="submenu-item">Strangeforms</a></li></ul></li><li><a href="/departments/structures-shelters" class="menu-item">Structures, Shelters</a></li><li><a href="/departments/surface-gear" class="menu-item">Surface Gear</a></li><li><a href="/departments/toolkits" class="menu-item">Toolkits</a></li><li><a href="/departments/transportation">Transportation</a><ul><li><a href="/departments/small-craft" class="submenu-item">Small Craft</a></li><li><a href="/departments/space-craft" class="submenu-item">Space Craft</a></li><li><a href="/departments/vehicles" class="submenu-item">Vehicles</a></li></ul></li><li><a href="/departments/uniques-and-valuata" class="menu-item">Uniques & Valuata</a></li><li><a href="/departments/weapons">Weapons</a><ul><li><a href="/departments/ammunition" class="submenu-item">Ammunition</a></li><li><a href="/departments/blades" class="submenu-item">Blades</a></li><li><a href="/departments/designators" class="submenu-item">Designators</a></li><li><a href="/departments/handguns" class="submenu-item">Handguns</a></li><li><a href="/departments/heavy-weapons" class="submenu-item">Heavy Weapons</a></li><li><a href="/departments/launchers" class="submenu-item">Launchers</a></li><li><a href="/departments/long-guns" class="submenu-item">Long Guns</a></li><li><a href="/departments/machineguns" class="submenu-item">Machineguns</a></li><li><a href="/departments/melee-weapons" class="submenu-item">Melee Weapons</a></li><li><a href="/departments/projectors" class="submenu-item">Projectors</a></li><li><a href="/departments/shotguns" class="submenu-item">Shotguns</a></li><li><a href="/departments/weapon-accessories" class="submenu-item">Weapon Accessories</a></li></ul></li></ul></div>
<div class="search-form">
<form>
<input type="text" name="search" class="search-input" id="search-input">
<button class="search-btn" id="search-button"><i class="fa fa-search"></i></button>
</form>
</div>
</div>
</div>
// touch event listener for dropdown box
var clientX, clientY;
window.addEventListener('touchstart', (e) => {
// capture the x,y coordinates
clientX = e.touches[0].clientX;
clientY = e.touches[0].clientY;
console.log(`x: ${clientX}\ny: ${clientY}`);
})
window.addEventListener('touchend', (e) => {
const el = document.getElementById('dept-dropdown');
if (el.style.display === 'block') {
const {left, top} = getScreenCoordinates(el);
const right = left + el.offsetWidth;
const bottom = top + el.offsetHeight;
if (clientX < left || clientX > right || clientY < top || clientY > bottom) {
el.style.display = 'none';
}
}
});
The application works correctly when I serve it from the VS Code server to the device browsers (Safari, Firefox, Chrome) but when I deploy it to Netlify the touch events don’t seem to be getting fired.
Test site: https://trav-csc-test.netlify.app
Github Repo: https://github.com/cmcknight/central-supply-catalog/tree/touch-events
I’m a bit new to using the touch events so it is likely that I’m not understanding something, but I’m lost as to what it might be.
This is a vanilla HTML/CSS/Javascript site (no jsQuery).
Thanks in advance for any insights and ideas!
Chuck