大佬教程收集整理的这篇文章主要介绍了从一个页面开关讲讲有限状态机,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我们想实现上面这样的按钮交互,先看看原版实现:
$('#botton').on('click',function(){ if ( $(this).text() === 'OFF' ){ //把按钮的文案改变一下 $(this).text('ON'); //开始播放 $('#player').start(); } else { $(this).text('OFF'); $('#player').stop(); } });
不过,
按照这个方式来做有几个不太优雅的地方:
if / else
里面的代码越来越臃肿.
@H_696_24@如果按钮的变化不止 on/off
两种,我们可能需要些一堆 else if
或者用switch / case
@H_419_39@
先看代码:
var fsm = (function(){ //初始状态 var status = 1; //状态对应的操作 var mapping = { '1': { text:'ON',action: $('#player').start },'-1': { text:'OFF',action: $('#player').stop },}; return function(btn){ //通过 *-1 实现status从 1/-1 切换 status *= -1; btn.text( mapping[status].text ); var fn = mapping[status].action; fn(); } })(); $('#botton').click(function(){ fsm(this); });
阅读上面代码能发现,对botton
的点击事件处理,只需要调用fsm
函数即可,内部的变化和操作,都不需要暴露出来.
fsm
内部,通过@H_505_25@mapping来定义和限制行为,唯一能够改变的只有status
,
这样的好处在于,能够避免在编码过程中人为的错误,因为事件响应部分只能有限的操作状态机的status
,而不是直接参与botton
的行为与表现.
以上是大佬教程为你收集整理的从一个页面开关讲讲有限状态机全部内容,希望文章能够帮你解决从一个页面开关讲讲有限状态机所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。