@jjlmoya/utils-hardware 1.21.0 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/category/index.ts +2 -1
- package/src/entries.ts +4 -1
- package/src/index.ts +1 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/mouseScrollTest/bibliography.astro +14 -0
- package/src/tool/mouseScrollTest/bibliography.ts +16 -0
- package/src/tool/mouseScrollTest/component.astro +150 -0
- package/src/tool/mouseScrollTest/entry.ts +29 -0
- package/src/tool/mouseScrollTest/i18n/de.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/en.ts +253 -0
- package/src/tool/mouseScrollTest/i18n/es.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/fr.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/id.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/it.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/ja.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/ko.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/nl.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/pl.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/pt.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/ru.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/sv.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/tr.ts +248 -0
- package/src/tool/mouseScrollTest/i18n/zh.ts +248 -0
- package/src/tool/mouseScrollTest/index.ts +9 -0
- package/src/tool/mouseScrollTest/logic.ts +277 -0
- package/src/tool/mouseScrollTest/mouse-scroll-test.css +610 -0
- package/src/tool/mouseScrollTest/seo.astro +15 -0
- package/src/tool/mouseScrollTest/ui.ts +34 -0
- package/src/tools.ts +2 -1
package/package.json
CHANGED
package/src/category/index.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { testMando } from '../tool/gamepadTest/index';
|
|
|
5
5
|
import { probadorVibracionMando } from '../tool/gamepadVibrationTester/index';
|
|
6
6
|
import { testRaton } from '../tool/mousePollingTest/index';
|
|
7
7
|
import { mouseDoubleClickTest } from '../tool/mouseDoubleClickTest/index';
|
|
8
|
+
import { mouseScrollTest } from '../tool/mouseScrollTest/index';
|
|
8
9
|
import { estimadorSaludBateria } from '../tool/batteryHealthEstimator/index';
|
|
9
10
|
import { toneGenerator } from '../tool/toneGenerator/index';
|
|
10
11
|
import { refreshRateDetector } from '../tool/refreshRateDetector/index';
|
|
@@ -14,7 +15,7 @@ import { upsRuntimeCalculator } from '../tool/upsRuntimeCalculator/index';
|
|
|
14
15
|
|
|
15
16
|
export const hardwareCategory: HardwareCategoryEntry = {
|
|
16
17
|
icon: 'mdi:memory',
|
|
17
|
-
tools: [pixelesPantalla, testTeclado, testMando, probadorVibracionMando, testRaton, mouseDoubleClickTest, estimadorSaludBateria, toneGenerator, refreshRateDetector, monitorGhostingTest, spectrumCanvas, upsRuntimeCalculator],
|
|
18
|
+
tools: [pixelesPantalla, testTeclado, testMando, probadorVibracionMando, testRaton, mouseDoubleClickTest, mouseScrollTest, estimadorSaludBateria, toneGenerator, refreshRateDetector, monitorGhostingTest, spectrumCanvas, upsRuntimeCalculator],
|
|
18
19
|
i18n: {
|
|
19
20
|
en: () => import('./i18n/en').then((m) => m.content),
|
|
20
21
|
es: () => import('./i18n/es').then((m) => m.content),
|
package/src/entries.ts
CHANGED
|
@@ -12,6 +12,8 @@ export { testRaton } from './tool/mousePollingTest/entry';
|
|
|
12
12
|
export type { TestRatonLocaleContent } from './tool/mousePollingTest/entry';
|
|
13
13
|
export { mouseDoubleClickTest } from './tool/mouseDoubleClickTest/entry';
|
|
14
14
|
export type { MouseDoubleClickTestLocaleContent } from './tool/mouseDoubleClickTest/entry';
|
|
15
|
+
export { mouseScrollTest } from './tool/mouseScrollTest/entry';
|
|
16
|
+
export type { MouseScrollTestLocaleContent } from './tool/mouseScrollTest/entry';
|
|
15
17
|
export { toneGenerator } from './tool/toneGenerator/entry';
|
|
16
18
|
export type { ToneGeneratorLocaleContent } from './tool/toneGenerator/entry';
|
|
17
19
|
export { refreshRateDetector } from './tool/refreshRateDetector/entry';
|
|
@@ -30,9 +32,10 @@ import { probadorVibracionMando } from './tool/gamepadVibrationTester/entry';
|
|
|
30
32
|
import { testTeclado } from './tool/keyboardTest/entry';
|
|
31
33
|
import { testRaton } from './tool/mousePollingTest/entry';
|
|
32
34
|
import { mouseDoubleClickTest } from './tool/mouseDoubleClickTest/entry';
|
|
35
|
+
import { mouseScrollTest } from './tool/mouseScrollTest/entry';
|
|
33
36
|
import { toneGenerator } from './tool/toneGenerator/entry';
|
|
34
37
|
import { refreshRateDetector } from './tool/refreshRateDetector/entry';
|
|
35
38
|
import { monitorGhostingTest } from './tool/monitorGhostingTest/entry';
|
|
36
39
|
import { spectrumCanvas } from './tool/colorAccuracyTest/entry';
|
|
37
40
|
import { upsRuntimeCalculator } from './tool/upsRuntimeCalculator/entry';
|
|
38
|
-
export const ALL_ENTRIES = [estimadorSaludBateria, pixelesPantalla, testMando, probadorVibracionMando, testTeclado, testRaton, mouseDoubleClickTest, toneGenerator, refreshRateDetector, monitorGhostingTest, spectrumCanvas, upsRuntimeCalculator];
|
|
41
|
+
export const ALL_ENTRIES = [estimadorSaludBateria, pixelesPantalla, testMando, probadorVibracionMando, testTeclado, testRaton, mouseDoubleClickTest, mouseScrollTest, toneGenerator, refreshRateDetector, monitorGhostingTest, spectrumCanvas, upsRuntimeCalculator];
|
package/src/index.ts
CHANGED
|
@@ -23,6 +23,7 @@ export { TEST_MANDO_TOOL } from './tool/gamepadTest/index';
|
|
|
23
23
|
export { PROBADOR_VIBRACION_MANDO_TOOL } from './tool/gamepadVibrationTester/index';
|
|
24
24
|
export { TEST_RATON_TOOL } from './tool/mousePollingTest/index';
|
|
25
25
|
export { MOUSE_DOUBLE_CLICK_TEST_TOOL } from './tool/mouseDoubleClickTest/index';
|
|
26
|
+
export { MOUSE_SCROLL_TEST_TOOL } from './tool/mouseScrollTest/index';
|
|
26
27
|
export { ESTIMADOR_SALUD_BATERIA_TOOL } from './tool/batteryHealthEstimator/index';
|
|
27
28
|
export { TONE_GENERATOR_TOOL } from './tool/toneGenerator/index';
|
|
28
29
|
export { REFRESH_RATE_DETECTOR_TOOL } from './tool/refreshRateDetector/index';
|
|
@@ -4,8 +4,8 @@ import { hardwareCategory } from '../data';
|
|
|
4
4
|
|
|
5
5
|
describe('Tool Validation Suite', () => {
|
|
6
6
|
describe('Library Registration', () => {
|
|
7
|
-
it('should have
|
|
8
|
-
expect(ALL_TOOLS.length).toBe(
|
|
7
|
+
it('should have 13 tools in ALL_TOOLS', () => {
|
|
8
|
+
expect(ALL_TOOLS.length).toBe(13);
|
|
9
9
|
});
|
|
10
10
|
|
|
11
11
|
it('hardwareCategory should be defined', () => {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
+
import type { KnownLocale } from '../../types';
|
|
4
|
+
import { mouseScrollTest } from './index';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'en' } = Astro.props;
|
|
11
|
+
const content = await mouseScrollTest.i18n[locale]?.();
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
{content && content.bibliography.length > 0 && <SharedBibliography links={content.bibliography} />}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BibliographyEntry } from '../../../types';
|
|
2
|
+
|
|
3
|
+
export const bibliography: BibliographyEntry[] = [
|
|
4
|
+
{
|
|
5
|
+
name: 'Scroll wheel: mouse wheel hardware and common usage',
|
|
6
|
+
url: 'https://en.wikipedia.org/wiki/Scroll_wheel',
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: 'Rotary encoder: electromechanical sensing, wear, dust, and direction signals',
|
|
10
|
+
url: 'https://en.wikipedia.org/wiki/Rotary_encoder',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: 'Incremental encoder: quadrature output and direction detection',
|
|
14
|
+
url: 'https://en.wikipedia.org/wiki/Incremental_encoder',
|
|
15
|
+
},
|
|
16
|
+
];
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { KnownLocale } from '../../types';
|
|
3
|
+
import type { MouseScrollTestUI } from './ui';
|
|
4
|
+
import { Icon } from 'astro-icon/components';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
ui?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const { ui } = Astro.props;
|
|
12
|
+
const t = (ui ?? {}) as MouseScrollTestUI;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<div class="mst-root" id="mst-root" data-config={JSON.stringify({
|
|
16
|
+
statusIdle: t.statusIdle,
|
|
17
|
+
statusClean: t.statusClean,
|
|
18
|
+
statusWarning: t.statusWarning,
|
|
19
|
+
statusMixed: t.statusMixed,
|
|
20
|
+
upward: t.upward,
|
|
21
|
+
downward: t.downward,
|
|
22
|
+
leftward: t.leftward,
|
|
23
|
+
rightward: t.rightward,
|
|
24
|
+
noDirection: t.noDirection,
|
|
25
|
+
sensitivityUnit: t.sensitivityUnit,
|
|
26
|
+
emptyLog: t.emptyLog,
|
|
27
|
+
cleanEvent: t.cleanEvent,
|
|
28
|
+
reversalEvent: t.reversalEvent,
|
|
29
|
+
jitterEvent: t.jitterEvent,
|
|
30
|
+
verticalAxis: t.verticalAxis,
|
|
31
|
+
horizontalAxis: t.horizontalAxis,
|
|
32
|
+
noDataValue: t.noDataValue,
|
|
33
|
+
})}>
|
|
34
|
+
<section class="mst-card">
|
|
35
|
+
<div id="mst-capture" class="mst-capture" data-capture-state="locked" tabindex="0" role="application" aria-label={t.captureTitle}>
|
|
36
|
+
<div class="mst-scope" aria-hidden="true">
|
|
37
|
+
<span class="mst-orbit mst-orbit-one"></span>
|
|
38
|
+
<span class="mst-orbit mst-orbit-two"></span>
|
|
39
|
+
<span class="mst-wheel">
|
|
40
|
+
<span class="mst-wheel-line"></span>
|
|
41
|
+
<span class="mst-wheel-line"></span>
|
|
42
|
+
<span class="mst-wheel-line"></span>
|
|
43
|
+
</span>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="mst-capture-copy">
|
|
46
|
+
<span><Icon name="mdi:mouse" /> {t.badge}</span>
|
|
47
|
+
<small>{t.captureHint}</small>
|
|
48
|
+
</div>
|
|
49
|
+
<div class="mst-axis-grid" aria-hidden="true">
|
|
50
|
+
<span id="mst-vertical-needle" class="mst-needle mst-needle-vertical"></span>
|
|
51
|
+
<span id="mst-horizontal-needle" class="mst-needle mst-needle-horizontal"></span>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="mst-focus-lock" aria-live="polite">
|
|
54
|
+
<span class="mst-lock-badge mst-lock-badge-locked">
|
|
55
|
+
<Icon name="mdi:lock" />
|
|
56
|
+
{t.focusLockTitle}
|
|
57
|
+
</span>
|
|
58
|
+
<p class="mst-lock-text mst-lock-text-locked">{t.focusLockText}</p>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<div class="mst-panel">
|
|
63
|
+
<div class="mst-score">
|
|
64
|
+
<span>{t.stabilityScore}</span>
|
|
65
|
+
<strong id="mst-score">100%</strong>
|
|
66
|
+
<small id="mst-status" data-state="idle">{t.statusIdle}</small>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<p class="mst-direction-note">{t.directionNote}</p>
|
|
70
|
+
|
|
71
|
+
<div class="mst-metrics">
|
|
72
|
+
<div>
|
|
73
|
+
<span>{t.totalTicks}</span>
|
|
74
|
+
<strong id="mst-total">0</strong>
|
|
75
|
+
</div>
|
|
76
|
+
<div>
|
|
77
|
+
<span>{t.reversals}</span>
|
|
78
|
+
<strong id="mst-reversals">0</strong>
|
|
79
|
+
</div>
|
|
80
|
+
<div>
|
|
81
|
+
<span>{t.longestRun}</span>
|
|
82
|
+
<strong id="mst-longest-run">0</strong>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<div class="mst-telemetry">
|
|
87
|
+
<div class="mst-axis-card">
|
|
88
|
+
<span>{t.verticalAxis}</span>
|
|
89
|
+
<b id="mst-vertical-meter"></b>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="mst-axis-card">
|
|
92
|
+
<span>{t.horizontalAxis}</span>
|
|
93
|
+
<b id="mst-horizontal-meter"></b>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
<div class="mst-readouts">
|
|
98
|
+
<div>
|
|
99
|
+
<span>{t.dominantDirection}</span>
|
|
100
|
+
<strong id="mst-dominant">{t.noDirection}</strong>
|
|
101
|
+
</div>
|
|
102
|
+
<div>
|
|
103
|
+
<span>{t.lastDelta}</span>
|
|
104
|
+
<strong id="mst-last-delta">{t.noDataValue}</strong>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
<label class="mst-sensitivity">
|
|
109
|
+
<span>{t.sensitivityLabel}</span>
|
|
110
|
+
<b><span id="mst-sensitivity-value">12</span> {t.sensitivityUnit}</b>
|
|
111
|
+
<input id="mst-sensitivity" type="range" min="2" max="40" step="1" value="12" />
|
|
112
|
+
</label>
|
|
113
|
+
|
|
114
|
+
<div class="mst-log-head">
|
|
115
|
+
<span>{t.logTitle}</span>
|
|
116
|
+
<button id="mst-reset" type="button">{t.reset}</button>
|
|
117
|
+
</div>
|
|
118
|
+
<ol id="mst-log" class="mst-log"></ol>
|
|
119
|
+
</div>
|
|
120
|
+
</section>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<script>
|
|
124
|
+
import { MouseScrollTester } from './logic';
|
|
125
|
+
|
|
126
|
+
const root = document.getElementById('mst-root');
|
|
127
|
+
const labels = JSON.parse(root?.dataset.config ?? '{}');
|
|
128
|
+
|
|
129
|
+
new MouseScrollTester(
|
|
130
|
+
{
|
|
131
|
+
capture: document.getElementById('mst-capture'),
|
|
132
|
+
score: document.getElementById('mst-score'),
|
|
133
|
+
status: document.getElementById('mst-status'),
|
|
134
|
+
total: document.getElementById('mst-total'),
|
|
135
|
+
reversals: document.getElementById('mst-reversals'),
|
|
136
|
+
longestRun: document.getElementById('mst-longest-run'),
|
|
137
|
+
lastDelta: document.getElementById('mst-last-delta'),
|
|
138
|
+
dominant: document.getElementById('mst-dominant'),
|
|
139
|
+
sensitivity: document.getElementById('mst-sensitivity') as HTMLInputElement | null,
|
|
140
|
+
sensitivityValue: document.getElementById('mst-sensitivity-value'),
|
|
141
|
+
reset: document.getElementById('mst-reset'),
|
|
142
|
+
log: document.getElementById('mst-log'),
|
|
143
|
+
verticalNeedle: document.getElementById('mst-vertical-needle'),
|
|
144
|
+
horizontalNeedle: document.getElementById('mst-horizontal-needle'),
|
|
145
|
+
verticalMeter: document.getElementById('mst-vertical-meter'),
|
|
146
|
+
horizontalMeter: document.getElementById('mst-horizontal-meter'),
|
|
147
|
+
},
|
|
148
|
+
labels,
|
|
149
|
+
);
|
|
150
|
+
</script>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { HardwareToolEntry, ToolLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
import type { MouseScrollTestUI } from './ui';
|
|
4
|
+
export type MouseScrollTestLocaleContent = ToolLocaleContent<MouseScrollTestUI>;
|
|
5
|
+
|
|
6
|
+
export const mouseScrollTest: HardwareToolEntry<MouseScrollTestUI> = {
|
|
7
|
+
id: 'mouse-scroll-test',
|
|
8
|
+
icons: {
|
|
9
|
+
bg: 'mdi:mouse',
|
|
10
|
+
fg: 'mdi:swap-vertical-bold',
|
|
11
|
+
},
|
|
12
|
+
i18n: {
|
|
13
|
+
de: () => import('./i18n/de').then((m) => m.content),
|
|
14
|
+
en: () => import('./i18n/en').then((m) => m.content),
|
|
15
|
+
es: () => import('./i18n/es').then((m) => m.content),
|
|
16
|
+
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
17
|
+
id: () => import('./i18n/id').then((m) => m.content),
|
|
18
|
+
it: () => import('./i18n/it').then((m) => m.content),
|
|
19
|
+
ja: () => import('./i18n/ja').then((m) => m.content),
|
|
20
|
+
ko: () => import('./i18n/ko').then((m) => m.content),
|
|
21
|
+
nl: () => import('./i18n/nl').then((m) => m.content),
|
|
22
|
+
pl: () => import('./i18n/pl').then((m) => m.content),
|
|
23
|
+
pt: () => import('./i18n/pt').then((m) => m.content),
|
|
24
|
+
ru: () => import('./i18n/ru').then((m) => m.content),
|
|
25
|
+
sv: () => import('./i18n/sv').then((m) => m.content),
|
|
26
|
+
tr: () => import('./i18n/tr').then((m) => m.content),
|
|
27
|
+
zh: () => import('./i18n/zh').then((m) => m.content),
|
|
28
|
+
},
|
|
29
|
+
};
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { MouseScrollTestUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'mausrad-test';
|
|
7
|
+
const title = 'Mausrad Test';
|
|
8
|
+
const description = 'Diagnostizieren Sie Mausrad-Aussetzer, Rücksprünge, inkonsistente Scrollrichtung und schwache Encoder-Signale mit einem lokalen browserbasierten Mausrad-Test.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Was erkennt ein Mausrad-Test?',
|
|
13
|
+
answer: 'Ein Mausrad-Test zeichnet Radereignisse auf und sucht nach instabilen Richtungswechseln, schwachen winzigen Deltas und inkonsistentem Scrollen. Diese Symptome treten häufig auf, wenn der Radencoder verschmutzt, abgenutzt, falsch ausgerichtet oder elektronisch gestört ist.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: 'Was ist ein Rücksprung beim Scrollen?',
|
|
17
|
+
answer: 'Ein Rücksprung tritt auf, wenn Sie in eine Richtung scrollen, der Computer jedoch ein kurzes Ereignis in die entgegengesetzte Richtung empfängt. Wiederholt sich dies bei gleichmäßigem Scrollen, ist dies ein starkes Zeichen für Encoder-Prellen oder Verschmutzung.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: 'Funktioniert dieser Test mit Touchpads?',
|
|
21
|
+
answer: 'Ja, aber das Ergebnis ist am aussagekräftigsten für physische Mausräder. Touchpads und sanfte Scrollräder erzeugen viele kleine Deltas, daher hilft die Empfindlichkeitssteuerung, beabsichtigte feine Bewegungen von verdächtigem Jitter zu trennen.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: 'Lädt der Test meine Mausdaten hoch?',
|
|
25
|
+
answer: 'Nein. Die Berechnung läuft lokal in Ihrem Browser. Das Tool verwendet nur Radereignisse, während sich der Mauszeiger im Erfassungsbereich befindet.',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
const howToData = [
|
|
30
|
+
{
|
|
31
|
+
name: 'Platzieren Sie den Zeiger über dem Erfassungsfeld',
|
|
32
|
+
text: 'Bewegen Sie den Cursor in den Scroll-Laborbereich, damit die Seite Radereignisse erfassen kann, ohne das umgebende Dokument zu verschieben.',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'Scrollen Sie gleichmäßig in eine Richtung',
|
|
36
|
+
text: 'Testen Sie jeweils eine Richtung: Rollen Sie langsam über mehrere Klicks nach oben, setzen Sie zurück oder pausieren Sie, dann testen Sie separat nach unten. Schnelle absichtliche Richtungswechsel können falsche Rücksprungwerte erzeugen.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Achten Sie auf Rücksprünge',
|
|
40
|
+
text: 'Wenn der Umkehrzähler steigt, während Ihr Finger sich noch in eine Richtung bewegt, wiederholen Sie dieselbe Bewegung, um das Muster zu bestätigen.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Stimmen Sie die Empfindlichkeit ab',
|
|
44
|
+
text: 'Erhöhen Sie die Empfindlichkeit für sanfte Touchpads oder senken Sie sie für strenge mechanische Radtests. Die Stabilitätsbewertung wird sofort aktualisiert.',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
49
|
+
'@context': 'https://schema.org',
|
|
50
|
+
'@type': 'FAQPage',
|
|
51
|
+
mainEntity: faqData.map((item) => ({
|
|
52
|
+
'@type': 'Question',
|
|
53
|
+
name: item.question,
|
|
54
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
55
|
+
})),
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const howToSchema: WithContext<HowTo> = {
|
|
59
|
+
'@context': 'https://schema.org',
|
|
60
|
+
'@type': 'HowTo',
|
|
61
|
+
name: title,
|
|
62
|
+
description,
|
|
63
|
+
step: howToData.map((step, i) => ({
|
|
64
|
+
'@type': 'HowToStep',
|
|
65
|
+
position: i + 1,
|
|
66
|
+
name: step.name,
|
|
67
|
+
text: step.text,
|
|
68
|
+
})),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
72
|
+
'@context': 'https://schema.org',
|
|
73
|
+
'@type': 'SoftwareApplication',
|
|
74
|
+
name: title,
|
|
75
|
+
description,
|
|
76
|
+
applicationCategory: 'UtilityApplication',
|
|
77
|
+
operatingSystem: 'All',
|
|
78
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
79
|
+
inLanguage: 'de',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const content: ToolLocaleContent<MouseScrollTestUI> = {
|
|
83
|
+
slug,
|
|
84
|
+
title,
|
|
85
|
+
description,
|
|
86
|
+
faq: faqData,
|
|
87
|
+
howTo: howToData,
|
|
88
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
89
|
+
bibliography,
|
|
90
|
+
seo: [
|
|
91
|
+
{
|
|
92
|
+
type: 'title',
|
|
93
|
+
text: 'Mausrad Test: Radaussetzer und Rücksprünge finden',
|
|
94
|
+
level: 2,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
type: 'paragraph',
|
|
98
|
+
html: 'Ein defektes Mausrad fällt selten auf einmal aus. Es beginnt meist mit kleinen Symptomen: eine Rastung scrollt in die falsche Richtung, die Seite springt nach oben während Sie nach unten scrollen, oder das Rad fühlt sich normal an, aber der Browser empfängt inkonsistente Ereignisse. Dieser Mausrad-Test zeichnet das Radsignal auf, das den Browser erreicht, und hebt die diagnostisch relevanten Muster hervor.',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
type: 'paragraph',
|
|
102
|
+
html: 'Das Ziel ist nicht zu messen, wie weit sich eine Seite bewegt hat. Das nützliche Signal ist die <strong>Richtungskonsistenz</strong>. Wenn Sie ein mechanisches Rad gleichmäßig nach unten drehen, sollte der Ereignisstrom in dieser Richtung bleiben. Kurze Gegensignale in einem engen Zeitfenster sind verdächtig, da sie dem Verhalten verschmutzter oder abgenutzter Scroll-Encoder entsprechen.',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
type: 'title',
|
|
106
|
+
text: 'Was das Tool misst',
|
|
107
|
+
level: 3,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'list',
|
|
111
|
+
items: [
|
|
112
|
+
'Gesamte Radpulse, die im Testfeld erfasst wurden',
|
|
113
|
+
'Rücksprünge: schnelle Vorzeichenwechsel, während die vorherige Richtung noch aktuell ist',
|
|
114
|
+
'Längster sauberer Lauf: wie viele aufeinanderfolgende Ereignisse in einer konsistenten Richtung blieben',
|
|
115
|
+
'Letztes Delta: Rohrichtung und Größe des jüngsten Radereignisses',
|
|
116
|
+
'Vertikale versus horizontale Aktivität, nützlich für Kippräder und Touchpads',
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'table',
|
|
121
|
+
headers: ['Signal', 'Gesundes Muster', 'Verdächtiges Muster'],
|
|
122
|
+
rows: [
|
|
123
|
+
['Vertikales Rad', 'Lange Folgen von Auf- oder Ab-Ereignissen bei gleichmäßigem Scrollen', 'Wechselnde Auf/Ab-Ereignisse, während Ihr Finger eine Richtung beibehält'],
|
|
124
|
+
['Horizontale Neigung', 'Links- oder Rechtsereignisse nur bei Verwendung von Neige- oder horizontalen Gesten', 'Unerwartete seitliche Bewegung bei normaler vertikaler Radnutzung'],
|
|
125
|
+
['Kleine Deltas', 'Gelegentlich kleine Werte bei sanften Rädern oder Touchpads', 'Hoher Anteil winziger instabiler Werte bei einem mechanischen Rastrad'],
|
|
126
|
+
['Stabilitätsbewertung', 'Bleibt über mehrere bewusste Durchläufe hoch', 'Fällt wiederholt, weil Umkehrungen im gleichen Richtungstest auftreten'],
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
type: 'title',
|
|
131
|
+
text: 'Häufige Ursachen für Mausrad-Aussetzer',
|
|
132
|
+
level: 3,
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
type: 'paragraph',
|
|
136
|
+
html: 'Die meisten Mausräder verwenden einen Encoder, der Drehung in Pulse umwandelt. Staub, Oxidation, abgenutzte Kontakte, eine lockere Radachse, Firmware-Filterprobleme oder ein beschädigtes Kabel können diese Pulse inkonsistent machen. Wenn der Encoder kurzzeitig die falsche Phase meldet, kann das Betriebssystem ein Radereignis in entgegengesetzter Richtung empfangen, obwohl sich das Rad in der ursprünglichen Richtung weiterbewegt hat.',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
type: 'table',
|
|
140
|
+
headers: ['Symptom', 'Wahrscheinliche Ursache', 'Nächster Check'],
|
|
141
|
+
rows: [
|
|
142
|
+
['Seite springt beim Runterscrollen nach oben', 'Encoder-Prellen oder Schmutz im Radmechanismus', 'Führen Sie einen langsamen Abwärtsdurchlauf durch und beobachten Sie den Umkehrzähler'],
|
|
143
|
+
['Nur eine Anwendung scrollt schlecht', 'Anwendungsglättung, Zoom-Modus oder benutzerdefinierte Mausverknüpfung', 'Testen Sie im Browser und vergleichen Sie mit einer anderen App'],
|
|
144
|
+
['Rad funktioniert nach Ausblasen, fällt dann wieder aus', 'Vorübergehende Schmutzverschiebung oder abgenutzte Encoder-Kontakte', 'Nach einigen Minuten normaler Nutzung wiederholen'],
|
|
145
|
+
['Unerwartete horizontale Bewegung erscheint', 'Kipprad-Rauschen, Touchpad-Geste oder Treiberzuordnung', 'Überprüfen Sie die horizontale Achsanzeige während vertikalen Scrollens'],
|
|
146
|
+
['Kabellose Maus scrollt unregelmäßig', 'Schwache Batterie, Empfängerentfernung oder Störungen', 'Mit frischer Batterie und nahem Empfänger erneut testen'],
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
type: 'title',
|
|
151
|
+
text: 'Zuverlässig testen',
|
|
152
|
+
level: 3,
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
type: 'list',
|
|
156
|
+
items: [
|
|
157
|
+
'Platzieren Sie den Zeiger vor dem Scrollen im Erfassungsfeld, damit die Seite normale Seitenbewegungen verhindern kann',
|
|
158
|
+
'Testen Sie jeweils eine Richtung: scrollen Sie langsam 10 bis 20 Rastungen nach oben ohne Richtungswechsel',
|
|
159
|
+
'Zurücksetzen oder pausieren, dann denselben Einrichtungs-Durchlauf nach unten wiederholen',
|
|
160
|
+
'Wechseln Sie nicht schnell zwischen auf und ab, da absichtliche schnelle Richtungswechsel wie Rücksprünge aussehen können',
|
|
161
|
+
'Wenn Umkehrungen auftreten, wiederholen Sie die fehlerhafte Richtung mehrmals, um die Reproduzierbarkeit zu bestätigen',
|
|
162
|
+
'Vergleichen Sie mit einer anderen Maus am selben Computer, wenn Sie Hardware von Software trennen müssen',
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
type: 'title',
|
|
167
|
+
text: 'Die Bewertung interpretieren',
|
|
168
|
+
level: 3,
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
type: 'paragraph',
|
|
172
|
+
html: 'Die Stabilitätsbewertung ist eine schnelle Zusammenfassung. Eine hohe Punktzahl bedeutet, dass das Tool konsistente Richtung und wenige winzige unsichere Deltas sah. Eine niedrige Punktzahl beweist nicht automatisch, dass die Maus defekt ist, besonders bei Touchpads oder hochauflösenden sanften Rädern, aber wiederholte Rücksprünge während eines langsamen Einrichtungstests sind starke Hinweise auf ein echtes Radproblem.',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
type: 'table',
|
|
176
|
+
headers: ['Ergebnis', 'Bedeutung', 'Empfohlene Maßnahme'],
|
|
177
|
+
rows: [
|
|
178
|
+
['Keine Umkehrungen und lange saubere Läufe', 'Das Radsignal erscheint konsistent', 'Nur weiter testen, wenn Symptome im realen Einsatz auftreten'],
|
|
179
|
+
['Eine isolierte Umkehrung', 'Könnte versehentlicher Richtungswechsel oder ein Störereignis sein', 'Dieselbe Richtung langsam wiederholen'],
|
|
180
|
+
['Mehrere Umkehrungen im selben Durchlauf', 'Wahrscheinlich Encoder-Prellen, Schmutz oder Radverschleiß', 'Auf anderem Computer erneut testen und Ergebnis dokumentieren'],
|
|
181
|
+
['Viele Jitter-Ereignisse, aber keine Umkehrungen', 'Empfindlichkeit möglicherweise zu niedrig für den Gerätetyp', 'Empfindlichkeit für Touchpad oder Smooth-Scroll-Geräte erhöhen'],
|
|
182
|
+
['Horizontale Ereignisse bei vertikaler Radnutzung', 'Mögliches Kipprad-Rauschen oder Treiberzuordnungsrauschen', 'Benutzerdefinierte Maussoftware deaktivieren und erneut testen'],
|
|
183
|
+
],
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
type: 'title',
|
|
187
|
+
text: 'Mechanisches Rad versus Touchpad',
|
|
188
|
+
level: 3,
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
type: 'paragraph',
|
|
192
|
+
html: 'Ein mechanisches Rastrad erzeugt normalerweise klare Richtungsschritte. Ein Touchpad oder ein frei drehbares Rad kann viele kleine Deltas erzeugen, da das Betriebssystem sanftes Scrollen anwendet. Deshalb enthält dieses Tool eine Empfindlichkeitssteuerung: Erhöhen ignoriert winzige Bewegungen und lässt den Test sich auf Richtungsänderungen konzentrieren, die groß genug sind, um relevant zu sein.',
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
type: 'title',
|
|
196
|
+
text: 'Was Sie vor dem Austausch der Maus versuchen sollten',
|
|
197
|
+
level: 3,
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
type: 'list',
|
|
201
|
+
items: [
|
|
202
|
+
'Testen Sie in einem anderen Browser, um einen seitenspezifischen Rad-Handler auszuschließen',
|
|
203
|
+
'Deaktivieren Sie herstellereigene Maussoftware, Scroll-Beschleunigung oder Makro-Ebenen während der Diagnose',
|
|
204
|
+
'Verwenden Sie bei kabellosen Mäusen eine frische Batterie und bringen Sie den Empfänger näher',
|
|
205
|
+
'Reinigen Sie die Umgebung des Rads mit Druckluft, während die Maus ausgesteckt oder ausgeschaltet ist',
|
|
206
|
+
'Wenn die Maus unter Garantie steht, dokumentieren Sie das wiederholte Umkehrmuster als Nachweis',
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
type: 'paragraph',
|
|
211
|
+
html: 'Browserbasierte Tests können den Encoder nicht elektrisch prüfen, aber sie können exakt zeigen, was Ihre normale Software empfängt. Wenn der Browser während eines sorgfältigen Einrichtungs-Scrollens Radereignisse in falscher Richtung empfängt, können andere Anwendungen sie ebenfalls empfangen.',
|
|
212
|
+
},
|
|
213
|
+
],
|
|
214
|
+
ui: {
|
|
215
|
+
badge: 'Radsignal-Labor',
|
|
216
|
+
captureTitle: 'Scrollen Sie im Signalfeld',
|
|
217
|
+
captureHint: 'Verwenden Sie gleichmäßige Einrichtungs-Raddurchläufe, um Rücksprünge aufzudecken',
|
|
218
|
+
focusLockTitle: 'Diese Scroll-Zone aktivieren',
|
|
219
|
+
focusLockText: 'Klicken Sie auf diese Zone und scrollen Sie hier. Die Seite bewegt sich nicht, während diese Zone aktiv ist.',
|
|
220
|
+
stabilityScore: 'Stabilitätsbewertung',
|
|
221
|
+
statusIdle: 'Scrollen Sie über das Feld, um die Radkonsistenz zu messen',
|
|
222
|
+
statusClean: 'Die Radrichtung ist in den erfassten Proben stabil',
|
|
223
|
+
statusWarning: 'Rücksprünge beim letzten Scrollen erkannt',
|
|
224
|
+
statusMixed: 'Viele winzige Deltas erkannt; passen Sie die Empfindlichkeit für dieses Gerät an',
|
|
225
|
+
directionNote: 'Testen Sie jeweils eine Richtung. Schnelles Wechseln zwischen auf und ab kann falsche Rücksprungwerte erzeugen.',
|
|
226
|
+
totalTicks: 'Pulse',
|
|
227
|
+
reversals: 'Umkehrungen',
|
|
228
|
+
longestRun: 'Bester Lauf',
|
|
229
|
+
lastDelta: 'Letztes Delta',
|
|
230
|
+
verticalAxis: 'Vertikal',
|
|
231
|
+
horizontalAxis: 'Horizontal',
|
|
232
|
+
dominantDirection: 'Letzte Richtung',
|
|
233
|
+
upward: 'Auf',
|
|
234
|
+
downward: 'Ab',
|
|
235
|
+
leftward: 'Links',
|
|
236
|
+
rightward: 'Rechts',
|
|
237
|
+
noDirection: 'Keine Bewegung',
|
|
238
|
+
noDataValue: '-',
|
|
239
|
+
sensitivityLabel: 'Jitter-Empfindlichkeit',
|
|
240
|
+
sensitivityUnit: 'Delta',
|
|
241
|
+
reset: 'Zurücksetzen',
|
|
242
|
+
logTitle: 'Radereignis-Protokoll',
|
|
243
|
+
emptyLog: 'Scrollen Sie mit langsamer, gleichmäßiger Radbewegung über das Feld.',
|
|
244
|
+
cleanEvent: 'sauber',
|
|
245
|
+
reversalEvent: 'Rücksprung',
|
|
246
|
+
jitterEvent: 'winziges Delta',
|
|
247
|
+
},
|
|
248
|
+
};
|