Skip to content

Instantly share code, notes, and snippets.

@shirakaba
Last active August 22, 2021 10:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shirakaba/7ed35762c6a7087d9104eb100a495b0d to your computer and use it in GitHub Desktop.
Save shirakaba/7ed35762c6a7087d9104eb100a495b0d to your computer and use it in GitHub Desktop.
How text selection works in iOS Safari (inconclusive investigation)

Logging all events

Object.keys(window).forEach(key => {
    if (/^on/.test(key)) {
        window.addEventListener(key.slice(2), event => {
            const date = new Date();
            const timestamp = `${date.getMinutes()}:${date.getSeconds()}:${date.getMilliseconds()}`;
            console.log(`${timestamp} ${event.type} isTrusted: ${event.isTrusted}`);
        });
    }
});

Trials

Tap-and-release on a word

Run 1

[Log] 41:29:675 pointerover isTrusted: true
[Log] 41:29:684 pointerdown isTrusted: true
[Log] 41:30:469 gotpointercapture isTrusted: false
[Log] 41:30:470 pointerup isTrusted: true
[Log] 41:30:470 lostpointercapture isTrusted: false
[Log] 41:30:470 pointerout isTrusted: true

Run 2

[Log] 42:26:640 pointerover isTrusted: true
[Log] 42:26:641 pointerdown isTrusted: true
[Log] 42:27:481 gotpointercapture isTrusted: false
[Log] 42:27:482 pointerup isTrusted: true
[Log] 42:27:482 lostpointercapture isTrusted: false
[Log] 42:27:483 pointerout isTrusted: true

Conclusion

Normalising the times:

pointerover
1-9 ms
pointerdown
785-841 ms
gotpointercapture (untrusted)
1 ms
pointerup
0 ms
lostpointercapture (untrusted)
0-1 ms
pointerout

Tap-and-drag across a sentence

I performed some manual post-processing of the output JS logs.

Run 1

3686 pointerover
3686 pointerdown
4377 focus
5048 gotpointercapture (untrusted)
5049 pointermove
5063 pointermove
5081 pointermove
5097 pointermove
5113 pointermove
5133 pointermove
5147 pointermove
5163 pointermove
5179 pointermove
5197 pointermove
5213 pointermove
5230 pointermove
5247 pointermove
5263 pointermove
5280 pointermove
5297 pointermove
5314 pointermove
5330 pointermove
5347 pointermove
5364 pointermove
5384 pointermove
5397 pointermove
5414 pointermove
5430 pointermove
5449 pointermove
5464 pointermove
5480 pointermove
5496 pointermove
5513 pointermove
5530 pointermove
5547 pointermove
5564 pointermove
5580 pointermove
5597 pointermove
5614 pointermove
5630 pointermove
5647 pointermove
5663 pointermove
5680 pointermove
5697 pointermove
5714 pointermove
5730 pointermove
5747 pointermove
5764 pointermove
5780 pointermove
5797 pointermove
5813 pointermove
5830 pointermove
5848 pointermove
5864 pointermove
5880 pointermove
5897 pointermove
5914 pointermove
5931 pointermove
5947 pointermove
5965 pointermove
5981 pointermove
5997 pointermove
6088 pointerup
6089 lostpointercapture (untrusted)
6089 pointerout

Conclusion

pointerover
0 ms
pointerdown
691 ms
focus
671 ms
gotpointercapture (untrusted)
1 ms
[
pointermove
~16 ms
] x 58
91 ms
pointerup
1 ms
lostpointercapture (untrusted)
0 ms
pointerout
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment