Counts mouse inches, scroll events, key presses, mouse clicks (left and right), and displays the top 5 keys pressed along with their counts.
目前為
// ==UserScript==
// @name Useless Things Series: Mouse and Keyboard Event Counters
// @version 1.0
// @description Counts mouse inches, scroll events, key presses, mouse clicks (left and right), and displays the top 5 keys pressed along with their counts.
// @match *://*/*
// @grant none
// @license MIT
// @namespace https://greasyfork.org/users/1126616
// ==/UserScript==
(function() {
var mouseInches = 0;
var scrollCount = 0;
var letterCount = 0;
var leftClickCount = 0;
var rightClickCount = 0;
var keyPressCount = {};
var countersDiv = document.createElement('div');
countersDiv.style.position = 'fixed';
countersDiv.style.left = '10px';
countersDiv.style.top = '10px';
countersDiv.style.padding = '10px';
countersDiv.style.border = '2px solid #fff';
countersDiv.style.borderRadius = '5px';
countersDiv.style.transition = 'background-color 0.3s, opacity 0.3s';
countersDiv.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
countersDiv.style.color = '#fff';
countersDiv.style.cursor = 'move';
countersDiv.style.userSelect = 'none';
countersDiv.style.display = 'none';
countersDiv.style.opacity = '0';
document.body.appendChild(countersDiv);
var mouseCounter = createCounter('Mouse Inches');
var scrollCounter = createCounter('Scrolls');
var letterCounter = createCounter('Letters Pressed');
var leftClickCounter = createCounter('Left Clicks');
var rightClickCounter = createCounter('Right Clicks');
var topKeysCounter = createCounter('Top 5 Keys');
countersDiv.appendChild(mouseCounter);
countersDiv.appendChild(scrollCounter);
countersDiv.appendChild(letterCounter);
countersDiv.appendChild(leftClickCounter);
countersDiv.appendChild(rightClickCounter);
countersDiv.appendChild(topKeysCounter);
var timeout;
var lastScrollTime = new Date().getTime();
var isDragging = false;
var offsetX, offsetY;
countersDiv.addEventListener('mousedown', function(e) {
isDragging = true;
offsetX = e.clientX - countersDiv.getBoundingClientRect().left;
offsetY = e.clientY - countersDiv.getBoundingClientRect().top;
});
document.addEventListener('mousemove', function(e) {
if (isDragging) {
countersDiv.style.left = e.clientX - offsetX + 'px';
countersDiv.style.top = e.clientY - offsetY + 'px';
}
});
document.addEventListener('mouseup', function() {
isDragging = false;
});
document.addEventListener('mousemove', function(event) {
clearTimeout(timeout);
var deltaX = event.movementX || 0;
var deltaY = event.movementY || 0;
mouseInches += Math.sqrt(deltaX * deltaX + deltaY * deltaY) / 96;
updateCounters();
timeout = setTimeout(function() {
countersDiv.style.opacity = '0';
setTimeout(function() {
countersDiv.style.display = 'none';
}, 300);
}, 3000);
});
document.addEventListener('wheel', function(event) {
var currentTime = new Date().getTime();
if (currentTime - lastScrollTime > 100) {
scrollCount++;
lastScrollTime = currentTime;
}
updateCounters();
});
document.addEventListener('keydown', function(event) {
letterCount++;
var key = event.key.toUpperCase();
keyPressCount[key] = (keyPressCount[key] || 0) + 1;
updateCounters();
});
document.addEventListener('mousedown', function(event) {
if (event.button === 0) {
leftClickCount++;
} else if (event.button === 2) {
rightClickCount++;
}
updateCounters();
});
function updateCounters() {
mouseCounter.textContent = 'Mouse Inches: ' + mouseInches.toFixed(2) + ' in';
scrollCounter.textContent = 'Scrolls: ' + scrollCount;
letterCounter.textContent = 'Letters Pressed: ' + letterCount;
leftClickCounter.textContent = 'Left Clicks: ' + leftClickCount;
rightClickCounter.textContent = 'Right Clicks: ' + rightClickCount;
// Display top 5 keys pressed in a column
var sortedKeys = Object.keys(keyPressCount).sort(function(a, b) {
return keyPressCount[b] - keyPressCount[a];
});
var topKeysText = 'Top 5 Keys:<br>';
for (var i = 0; i < Math.min(5, sortedKeys.length); i++) {
var key = sortedKeys[i];
topKeysText += key + ': ' + keyPressCount[key] + '<br>';
}
topKeysCounter.innerHTML = topKeysText;
countersDiv.style.display = 'block';
countersDiv.style.opacity = '1';
}
function createCounter(label) {
var counter = document.createElement('div');
counter.style.marginBottom = '8px';
counter.textContent = label + ': 0';
counter.style.color = '#fff';
return counter;
}
})();