- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想做的是让悬停过渡或动画(可以通过 javascript 使用 onmouseover
或 onmouseenter
触发),这也是可逆的(所以相反的动画应该在鼠标离开时发生)但是
如果不展示就很难描述,所以请检查这个非常接近我想要实现的代码笔:http://codepen.io/anon/pen/xROOqO
这里有两个问题:
transitionend
处理程序中耗时,因此我需要更新 css 和 js 以更新转换时间这甚至可以使用 css 转换(可能是关键帧动画),还是我应该坚持在 javascript 中设置计时器并忽略 css 的延迟?
最佳答案
不确定我要介绍的内容是否更简单,但它似乎解决了您的一些问题,并且符合我的口味。
主要思想是承认问题由于多个状态而变得复杂,并使用状态机解决它。这允许像这样的声明式方法:
const TRANSITIONS = {
'small-inside' : {
'transitionend' : 'big-inside',
'mouseover' : 'small-inside',
'mouseout' : 'small-outside',
},
'small-outside' : {
'transitionend' : 'small-outside',
'mouseover' : 'small-inside',
'mouseout' : 'small-outside',
},
'big-inside' : {
'transitionend' : 'big-inside',
'mouseover' : 'big-inside',
'mouseout' : 'big-outside',
},
'big-outside' : {
'transitionend' : 'small-outside',
'mouseover' : 'big-inside',
'mouseout' : 'big-outside',
},
}
事件处理非常简单:
function step(e){
box.className = TRANSITIONS[box.className][e.type];
}
box.addEventListener('transitionend', step);
box.addEventListener('mouseover', step);
box.addEventListener('mouseout', step);
另一种见解是,您可以使用 CSS transition-delay:3s
属性指定延迟:
div.small-inside,
div.big-inside {
width: 300px;
}
div.small-outside,
div.big-outside {
width: 150px;
}
div.big-outside {
transition-delay:3s;
}
概念证明在这里:http://codepen.io/anon/pen/pNNMWM .
我不喜欢我的解决方案的一点是,它假定初始状态为 small-outside
,而实际上鼠标指针在页面加载时可能恰好位于 div 内。您提到了从 JS 手动触发状态转换的能力。我相信只要您跟踪两个单独的 bool 变量,这是可能的:“鼠标在里面吗?”和“js要求成长吗?”。您不能将它们混合成一个状态并期望正确的“计数”。如您所见,我已经有了 2*2=4
状态,因为我正在尝试跟踪 {small,big}x{inside,outside}
- 可以想象以类似的方式将其扩展到 {small,big}x{inside,outside}x{js-open,js-close}
,并添加一些额外的“事件”,例如“打开”和“关闭”。
关于javascript - 延迟的可逆转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40594931/
有人知道符合上述所有条件的算法吗?我需要指定一个种子编号,以及我希望输出数字落入的范围(这也是输入数字所在的范围)。这个函数还需要有一个反向操作的对应物。 例如: 我传递了种子 5 和范围 5-35,
如何使递归重命名操作(Linux,使用 python)可逆? 我想在Linux下使用python编写一个程序,该程序执行以下任务:批量递归重命名文件夹中的所有文件,如果文件名有子字符串X,则重命名为Y
我的数组中有三种颜色。最初,我被要求创建一个函数,该函数只需要第一个函数并将其附加到末尾或执行相反的操作,因此我创建了这个函数: // Get our colours var colours = sc
当我错误地删除了contenteditable div中的一些文本时,我可以使用Ctrl + z将其反转。 但是在我使用 javascript 做了一些改变之后。我无法使用 Ctrl + z 返回到之
我有一个 PHP 网络服务,它当前返回一个 zip 存档作为其唯一输出。我正在使用 file_get_contents 从磁盘读取 zip 存档并将其作为响应的主体发回。 我希望它以 JSON 格式返
让我解释一下:在我的用例中,系统为我提供了很多大小可以变化的字符串(字符数;长度),有时它可能非常大!问题是我必须将这个字符串保存在“SQL Server”数据库表的列中,坏消息是我不允许在这个数据库
我是一名优秀的程序员,十分优秀!