功能
实现开关切换on/off动画,使用最少的标签
原理
使用双层div,底层为红色off层(父元素),顶层为绿色on层。点击顶层div添加方法(使用定时器刷新顶层div的left坐标),注册其他方法可将函数绑定底层div上。
代码
<div style="width: 60px;height: 20px;background-color: red;position: absolute;left: 0;top: 0;overflow: hidden;border-radius: 10px;">
<p style="position: absolute;left: 10px;top: 0;margin-top: 0;">off</p>
<div onclick="toggle(this)"
style="width: 60px;height: 20px;background-color: greenyellow;position: absolute;left: 0;top: 0;border-radius: 10px;">
<button style="position: absolute;left: 0;top: 0;width: 20px;height: 20px;border-radius: 50%;
pointer-events: none;"></button>
<p style="position: absolute;left: 30px;top: 0;margin-top: 0;">on</p>
</div>
</div>
<script>
var toggle = function(dom) {
var left = dom.style.left;
left = +(left.slice(0, -2)); //去除px单位,将变量转换为数字类型
if (left == 0) { //on到off的动画
toggle.si = setInterval(function() {
++left;
if (left >= 40) {
clearInterval(toggle.si);
return false;
}
dom.style.left = left + 'px';
}, 1000 / 60);
} else { //off到on的动画
toggle.si = setInterval(function() {
--left;
if (left < 0) {
clearInterval(toggle.si);
return false;
}
dom.style.left = left + 'px';
}, 1000 / 60);
}
}
</script>
总结
很好的实现了开关切换控件,样式方面未打磨到完美。