Skip to content

Commit

Permalink
Add basic scroll wheel event viewer
Browse files Browse the repository at this point in the history
  • Loading branch information
garykac committed Jun 17, 2020
1 parent 85b8418 commit c218eac
Show file tree
Hide file tree
Showing 5 changed files with 268 additions and 1 deletion.
2 changes: 1 addition & 1 deletion index.css
Original file line number Diff line number Diff line change
Expand Up @@ -83,5 +83,5 @@ code {

.desc {
display: block;
margin: 10px 10px;
margin: 5px 10px 8px 10px;
}
3 changes: 3 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ <h1>DOM Event Viewers</h1>

<span class="name2"><a href="mouse-event-viewer-shadow.html">Mouse Event Viewer (with shadow DOM)</a></span>
<span class="desc">Same as the standard Mouse Event Viewer except with additional shadow DOM elements.</span>

<span class="name2"><a href="wheel-event-viewer.html">Wheel Event Viewer</a></span>
<span class="desc">View mouse scroll <code>wheel</code> events.</span>
</div>
</div> <!-- row -->

Expand Down
13 changes: 13 additions & 0 deletions wheel-event-viewer.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.hilite_target {
background-color: #c0ffc0;
padding: 0 10px;
}

#target {
background-color: #c0ffc0;
border: 1px solid black;
margin: 10px 30px;
padding: 20px;
display: inline-block;
}

42 changes: 42 additions & 0 deletions wheel-event-viewer.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>Wheel Event Viewer</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<script type="text/javascript" src="output-table.js" ></script>
<script type="text/javascript" src="options.js" ></script>
<script type="text/javascript" src="shared.js" ></script>
<script type="text/javascript" src="wheel-event-viewer.js" ></script>
<style title="inject"></style>
<link rel="stylesheet" type="text/css" href="wheel-event-viewer.css" />
<link rel="stylesheet" type="text/css" href="shared.css" />

</head>

<body id="body">

<a class="main_link" href="index.html">DOM Event Viewers</a>

<h1>Wheel Event Viewer</h1>

<p>UserAgent: <span id="useragent"></span></p>

<div id="target"> Scroll here </div>

<p>
<input id="resetTable" type="button" onclick="resetTable();return false" value="Clear Table"/>
<a id="optionsToggle" href="javascript:toggleOptions()">Show Options</a>
</p>

<div id="options"></div>

<table id="output"></table>

<script language="javascript">
init();
</script>

</body>
</html>
209 changes: 209 additions & 0 deletions wheel-event-viewer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
// Mouse event viewer - shared
// Gary Kacmarcik - garykac@{gmail|google}.com

var _wheel_event_info = [
["mousedown", {
'preventDefault': {'checked': false},
'stopPropagation': {},
'ShowEvents': {},
'Highlight': {'checked': false},
},
"#ccffcc"],
["mouseup", {
'preventDefault': {'checked': false},
'stopPropagation': {},
'ShowEvents': {},
'Highlight': {'checked': false},
},
"#ffcccc"],
["wheel", {
'preventDefault': {'checked': true},
'stopPropagation': {},
'ShowEvents': {},
'Highlight': {},
},
"#e0e0e0"],
];

var _wheel_table_info = [
// Unlabeled group
["", "etype", [
["#", "etype", "text"],
["Event type", "etype", "html"],
], {
'grouplabel': false,
'header-background': "#e0e0e0"
}],

// Event
["Event", "event", [
["eventPhase", "event", "text"],
["bubbles", "event", "bool"],
["cancelable", "event", "bool"],
["defaultPrevented", "event", "bool"],
["composed", "event", "bool"],
["isTrusted", "event", "bool"],
["timeStamp", "event", "text"],
], {
'checked': false,
'header-background': "#a0ffff"
}],

// UIEvent
["UIEvent", "uievent", [
["view", "uievent", "text"],
["detail", "uievent", "text"],
], {
'checked': false,
'header-background': "#ffffff"
}],

// MouseEvent - UI Events
["MouseEvent", "mouseevent", [
["screenX", "mouseevent", "text"],
["screenY", "mouseevent", "text"],
["clientX", "mouseevent", "text"],
["clientY", "mouseevent", "text"],
], {
'checked': true,
'header-background': "#ffffc0"
}],

// MouseEvent - UI Events
["Buttons", "buttons", [
["button", "buttons", "text"],
["buttons", "buttons", "text"],
], {
'checked': true,
'header-background': "#e0e0e0"
}],

// WheelEvent - UI Events
["Wheel", "wheel", [
["deltaX", "wheel", "text"],
["deltaY", "wheel", "text"],
["deltaZ", "wheel", "text"],
["deltaMode", "wheel", "text"],
], {
'checked': true,
'header-background': "#c0f0c0"
}],
];

function setUserAgentText() {
var userAgent = navigator.userAgent;
uaDiv = document.getElementById("useragent");
setText(uaDiv, userAgent);
}

function resetTable() {
clearTable();
initOutputTable(_wheel_table_info);
}

function init() {
setUserAgentText();
var extra_options = [
["text", "Note: Options apply to new events only."],
["text", "Press 'c' to Clear Table."],
];
createOptions(document.getElementById("options"), _wheel_event_info, _wheel_table_info, extra_options);
injectCustomCSS(_wheel_event_info, _wheel_table_info);
resetTable();

var target = document.getElementById("target");
addEventListener(target, "mousedown", onMouseDown);
addEventListener(target, "mouseup", onMouseUp);
addEventListener(target, "wheel", onWheel);

addEventListener(document.getElementById("body"), "keydown", onKeyDown);
addEventListener(target, "contextmenu", onContextMenu);
}

function onKeyDown(e) {
if (e.code == "KeyC") {
resetTable();
}
}

function onContextMenu(e) {
e.preventDefault();
e.stopPropagation();
}

function onMouseDown(e) {
handleMouseEvent("mousedown", e);
}

function onMouseUp(e) {
handleMouseEvent("mouseup", e);
}

function onWheel(e) {
handleMouseEvent("wheel", e);
}

function handleMouseEvent(etype, e) {
var show = document.getElementById("show_" + etype);
if (show.checked) {
addMouseEvent(etype, e);
}
handleDefaultPropagation(etype, e);
}

function addMouseEvent(etype, e) {
if (!e) {
e = window.event;
}
var target = e.target.id;
var eventinfo = {};
eventinfo["Event type"] = calcHilightString(etype, e.type, true);

eventinfo["eventPhase"] = getEventPhase(e);
eventinfo["bubbles"] = e.bubbles;
eventinfo["cancelable"] = e.cancelable;
eventinfo["defaultPrevented"] = e.defaultPrevented;
eventinfo["composed"] = e.composed;
eventinfo["isTrusted"] = e.isTrusted;
eventinfo["timeStamp"] = e.timeStamp;

eventinfo["view"] = calcString(e.view !== null ? e.view.name : "null");
eventinfo["detail"] = e.detail;

eventinfo["screenX"] = e.screenX;
eventinfo["screenY"] = e.screenY;
eventinfo["clientX"] = e.clientX;
eventinfo["clientY"] = e.clientY;

var button = "-";
if (etype == "mousedown" || etype == "mouseup") {
button = e.button;
}
eventinfo["button"] = button;
eventinfo["buttons"] = e.buttons;

eventinfo["getModifierState"] = getModifierState(e);
eventinfo["shift"] = e.shiftKey;
eventinfo["ctrl"] = e.ctrlKey;
eventinfo["alt"] = e.altKey;
eventinfo["meta"] = e.metaKey;

eventinfo["deltaX"] = e.deltaX;
eventinfo["deltaY"] = e.deltaY;
eventinfo["deltaZ"] = e.deltaZ;

var deltaMode = "-";
if (etype == "wheel") {
if (e.deltaMode == 0)
deltaMode = "PIXEL";
else if (e.deltaMode == 1)
deltaMode = "LINE";
else if (e.deltaMode == 2)
deltaMode = "PAGE";
else
deltaMode = "??? (" + e.deltaMode + ")";
}
eventinfo["deltaMode"] = deltaMode;

addEventToOutput(eventinfo);
}

0 comments on commit c218eac

Please sign in to comment.