naver / egjs-flicking

🎠 ♻️ Everyday 30 million people experience. It's reliable, flexible and extendable carousel.
https://naver.github.io/egjs-flicking/
MIT License
2.69k stars 129 forks source link

fix: strict movetype moving wrong panel on circular flicking #842

Closed malangfox closed 6 months ago

malangfox commented 7 months ago

Issue

841

Details

ezgif com-video-to-gif (2)

When using the next Panel to move in moveType: strict, we use the following rules

  1. find the anchorAtPosition that is closest to the point the camera is currently showing.
  2. if anchorAtPosition is not the same as Flicking's current Panel, we move to anchorAtPosition.
  3. if anchorAtPosition is the same as Flicking's current Panel, navigate to adjacentAnchor which is the next/prev anchor of anchorAtPosition.

However, there is an exception to this rule that can cause an error when you rotate the circular Flicking once before the event that updates the current panel is fired,

If you rotate the Flicking once, you'll end up in a situation where the camera is showing the position of the current panel again.

If that happens, you won't be able to stop on that panel by step 3 and you'll move to the next Anchor. This will cause the error described in the issue.

In this PR, I have fixed moveType: strict to continuously update the current Panel based on the willChange event to prevent the above exception from occurring.

coveralls commented 7 months ago

Coverage Status

coverage: 82.638% (-0.001%) from 82.639% when pulling 044b72582200d8fb51e236181ad5c332a8ab2fe4 on malangfox:fix-circular-strict-panels into 346c43abe6cc6c853a02329fba9379c92303d471 on naver:master.