Скажем, я хочу создавать регулярные эффекты наведения для меню навигации, но вместо CSS я использую переходы D3 для «смягчения» эффекта. Это отлично работает с использованием mouseover
и mouseout
для метода .on
. Проблема, однако, в том, что переход застрял, если мышь покидает зависающую ссылку до перехода. Как избежать этого побочного эффекта?D3 mouseover переходы получает «застрял»
Например, с помощью этого кода, нижняя граница по-прежнему отображается оранжевым цветом, даже после того, как мышь переместилась в другом месте, если вы делаете это слишком быстро:
d3.selectAll("a")
.on("mouseover", function() {
d3.select(this)
.style("border-bottom-color", "#fff")
.transition()
.duration(1000)
.style("border-bottom-color", "#B23600"); })
.on("mouseout", function() {
d3.select(this)
.style("border-bottom-color", "#fff"); });
Я не знаю идеальный ответ, но я подозреваю, что MouseOut вызывается и завершается до длительности (1s) из наведение мыши завершено. Может быть, за 1100 раз для мыши? – cmonkey
Кроме того, чтение на http://bost.ocks.org/mike/transition/ предполагает наличие различий между версиями d3 версии 2 и 3. Какую версию вы используете? – cmonkey
У вас нет идеального ответа либо: Если, как и в вашем примере, вы используете HTML (а не SVG), то вы можете вообще пропустить переходы d3 и использовать css-переходы. Это определенно решит проблему, с которой вы столкнулись, и это будет более впечатляюще. Пользователи старых браузеров не получат переход, но oh wells ... – meetamit