Scenario

Scrolling cancels or disrupts IME composition

User scrolling the page or scrollable editor while the IME candidate window is open may cancel composition or move the caret out of sync—reported on iOS Safari with Japanese IME and Android Chrome with Chinese IME when scroll containers move the editing context.

ime
Scenario ID
scenario-ime-composition-scroll

Details

User scrolling the page or scrollable editor while the IME candidate window is open may cancel composition or move the caret out of sync—reported on iOS Safari with Japanese IME and Android Chrome with Chinese IME when scroll containers move the editing context.

Problem Overview

IME UI is anchored to the caret; scroll changes the viewport without necessarily firing the same events as keyboard-driven caret moves.

Observed Behavior

  • Japanese + iOS Safari: scroll during composition cancels (see cases).
  • Chinese + Android Chrome: scroll cancels or loses candidate alignment.

Impact

Composition cancelled mid-syllable; frustrating on long pages or nested scrollers.

Solutions

  • Avoid programmatic scroll that fights the user during isComposing when possible.
  • Stabilize scroll containers around the active editor.

References

Scenario flow

Visual view of how this scenario connects to its concrete cases and environments. Nodes can be dragged and clicked.

React Flow mini map

Variants

Each row is a concrete case for this scenario, with a dedicated document and playground.

Case OS Device Browser Keyboard Status
ce-0194-japanese-ime-scroll-cancels-ios-safari iOS 17.0 iPhone or iPad Any Safari 17.0 Japanese (IME) draft
ce-0205-chinese-ime-scroll-cancels-android-chrome Android 14.0 Phone or Tablet Any Chrome 120.0 Chinese (IME - Pinyin) draft

Browser compatibility

This matrix shows which browser and OS combinations have documented cases for this scenario. Click on a cell to view the specific case.

Confirmed
Draft
No case documented

Cases

This scenario affects multiple languages. Cases are grouped by language/input method below.

Chinese

1 case

Japanese

1 case

Related Scenarios

Other scenarios that share similar tags or category.

Tags: ime, composition, ios, android

Duplicate beforeinput or input events during IME composition

Some browsers and keyboards emit duplicate composition-related input or beforeinput events—especially iOS Safari dictation paths and certain Android keyboards—so naive handlers that insert text on every input may double characters or corrupt state.

2 cases
Tags: ime, composition, japanese, chinese

Blur and focus during IME composition (CJK and Japanese Safari)

Moving focus away from the editor while composing text (Chinese, Japanese, Korean) can cancel composition, commit partial text, or leave the IME candidate window out of sync. Safari often shows distinct behavior for Japanese; Chrome behavior for Chinese/Korean is covered in related cases.

2 cases
Tags: ime, composition, android

getTargetRanges() returns empty array in beforeinput events

The getTargetRanges() method in beforeinput events may return an empty array or undefined in various scenarios, including text prediction, certain IME compositions, or specific browser/device combinations. When getTargetRanges() is unavailable, developers must rely on window.getSelection() as a fallback, but this may be less accurate.

1 case
Tags: ime, chinese, android

Backspace granularity during Chinese IME on Android

On Android with Chinese IME, Backspace may delete whole syllables, partial Pinyin, or confuse composition boundaries compared to desktop—frameworks that handle Backspace uniformly across platforms mis-handle mobile.

1 case
Tags: ime, japanese, chinese

IME candidate list timing and conversion (kanji, hanzi)

Japanese kanji conversion and Chinese character selection depend on the IME candidate window. Delays, wrong ordering, or Safari-specific lag can cause users to commit the wrong character or see candidates that do not match the underlying buffer—especially under load or in complex layouts.

2 cases

Comments & Discussion

Have questions, suggestions, or want to share your experience? Join the discussion below.