Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix block & block toolbar vibration on block move #22640

Merged
merged 2 commits into from
Jun 23, 2020
Merged

Conversation

ellatrix
Copy link
Member

@ellatrix ellatrix commented May 26, 2020

Description

Fixes #20793.

The trick here is to only animate with whole pixels, because scrolling doesn't allow sub pixel positions. This also allows us to simplify popover code.

Best is to test for yourself on a retina screen.

Before:

vibration

After:

no-vibration

How has this been tested?

Screenshots

Types of changes

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@ellatrix
Copy link
Member Author

Btw, this does NOT fix the scroll displacement that sometimes happens on arrow up. Let's look into that separately. I think it has to do with the toolbar being inside thee scroll container.

@github-actions
Copy link

github-actions bot commented May 26, 2020

Size Change: -82 B (0%)

Total Size: 1.13 MB

Filename Size Change
build/block-editor/index.js 107 kB +59 B (0%)
build/components/index.js 197 kB -141 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.62 kB 0 B
build/api-fetch/index.js 3.4 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 7.27 kB 0 B
build/block-directory/style-rtl.css 937 B 0 B
build/block-directory/style.css 937 B 0 B
build/block-editor/style-rtl.css 10.6 kB 0 B
build/block-editor/style.css 10.6 kB 0 B
build/block-library/editor-rtl.css 7.6 kB 0 B
build/block-library/editor.css 7.6 kB 0 B
build/block-library/index.js 129 kB 0 B
build/block-library/style-rtl.css 8.03 kB 0 B
build/block-library/style.css 8.04 kB 0 B
build/block-library/theme-rtl.css 730 B 0 B
build/block-library/theme.css 732 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 48.2 kB 0 B
build/components/style-rtl.css 15.8 kB 0 B
build/components/style.css 15.8 kB 0 B
build/compose/index.js 9.62 kB 0 B
build/core-data/index.js 11.4 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.44 kB 0 B
build/date/index.js 5.47 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 569 B 0 B
build/dom/index.js 3.19 kB 0 B
build/edit-navigation/index.js 9.64 kB 0 B
build/edit-navigation/style-rtl.css 1.02 kB 0 B
build/edit-navigation/style.css 1.02 kB 0 B
build/edit-post/index.js 303 kB 0 B
build/edit-post/style-rtl.css 5.48 kB 0 B
build/edit-post/style.css 5.47 kB 0 B
build/edit-site/index.js 16.6 kB 0 B
build/edit-site/style-rtl.css 3.02 kB 0 B
build/edit-site/style.css 3.02 kB 0 B
build/edit-widgets/index.js 9.33 kB 0 B
build/edit-widgets/style-rtl.css 2.42 kB 0 B
build/edit-widgets/style.css 2.42 kB 0 B
build/editor/editor-styles-rtl.css 537 B 0 B
build/editor/editor-styles.css 539 B 0 B
build/editor/index.js 44.9 kB 0 B
build/editor/style-rtl.css 3.81 kB 0 B
build/editor/style.css 3.81 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.72 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 2.51 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.13 kB 0 B
build/list-reusable-blocks/style-rtl.css 450 B 0 B
build/list-reusable-blocks/style.css 451 B 0 B
build/media-utils/index.js 5.29 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 663 B 0 B
build/nux/style.css 660 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.5 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 14 kB 0 B
build/server-side-render/index.js 2.67 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 4.06 kB 0 B
build/viewport/index.js 1.85 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@ZebulanStanphill ZebulanStanphill added the [Type] Bug An existing feature does not function as intended label May 26, 2020
@jasmussen
Copy link
Contributor

This is pretty wild and incredibly incredible. There is zero vibration, the block is locked in place while moving. Let me pause for a brief applause here. Well done.

I'm seeing one issue, though. It's a little hard to explain, so here's a GIF:

gif

As best I can tell, here's how to reproduce:

  • Have a very long document
  • Scroll
  • Then click a block

What appears to happen is that the block toolbar is attached to another block than the one you selected, and when you mouse over the block toolbar to show the mover, the block toolbar seems to jump, thinking it's still attached to the one you actually selected.

As I said, it's hard to explain, but try it out and be sure to scroll down the page before you select a block. It's only the first block you select after having scrolled, which has this issue. If you select other blocks after having scrolled, things work fine.

I'm not seeing that issue in master. Other than that, this seems super duper solid, impressive work!

@ellatrix
Copy link
Member Author

@jasmussen Does the bug appear with the demo content? Are you using Chrome? I tried this in Chrome but I don't see any scrolling on select.

@jasmussen
Copy link
Contributor

Does the bug appear with the demo content? Are you using Chrome? I tried this in Chrome but I don't see any scrolling on select.

Chrome 83 stable, Mac, happened regardless of content. However I can no longer reproduce 🎉

So it's very possible that it was a ghost on my side, or a bad npm install, or something else. I will return if I find a way to reproduce, however since I can't do that anymore, all this needs is a code review it seems! 👍 👍

@ZebulanStanphill
Copy link
Member

Aside from the issue @jasmussen pointed out, this feels really good. Hoping to see this finished and merged soon!

Copy link
Contributor

@youknowriad youknowriad left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So if I understand properly, the only difference with the previous code of the animation is the "Math.round" calls right?

@ellatrix
Copy link
Member Author

@youknowriad That's the essence of it. :)

@ellatrix ellatrix force-pushed the try/scroll-animation branch from c898728 to ab2ca39 Compare May 28, 2020 13:52
@ellatrix
Copy link
Member Author

ellatrix commented May 28, 2020

Restored observing in the popover for the horizontal animation of the block and toolbar. There's something broken with that animation, but I see the same in master, so let's look into that separately.

@ellatrix ellatrix force-pushed the try/scroll-animation branch from ab2ca39 to b07cdee Compare June 23, 2020 14:37
moverDirection === 'horizontal' && node
}
// Observe movement for block animations (especially horizontal).
__unstableObserveElement={ node }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like this is the same thing as anchorRef. I wonder if we should instead observe anchor ref when it's a DOM element. I also wonder whether this means the interval inside Popover is useless.

@ellatrix ellatrix merged commit abf02d5 into master Jun 23, 2020
@ellatrix ellatrix deleted the try/scroll-animation branch June 23, 2020 16:19
@github-actions github-actions bot added this to the Gutenberg 8.5 milestone Jun 23, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Block & toolbar "vibration" during moving animation
5 participants