搜索
JavaScript代码执行的作用域顺序问题?
phpcn_u1582
phpcn_u1582 2017-06-26 10:51:58
[JavaScript讨论组]

var mark2=true;
$(".right").click(function(){

        if(mark2){
           move(1);
           mark2=false;
        }
    })

function move(obj){

             obj.animate({
                    width: arrW[index],
                     height: arrH[index],
                    opacity: arrO[index],
                    left: arrL[index],
                    top: arrT[index]

                },500,function(){
                    mark2=true;
                })
                }
                

点击$(".right") 执行move函数,主要是为了给obj元素添加动画,为了防止$(".right")点击的频率过快,让动画叠加,所以就用 mark2来控制,当动画执行完成后,也就是500毫秒后mark才为true,点击$(".right")才执行,否则不执行,但是我有一个疑问,就是当点击速度大于500毫秒的时候,if语句中的mark都没有执行的机会,又是重新一次点击了,那不是一直叠加动画了吗?因为mark一直为true,好像我这个理解是错误的,因为程序是能正常执行的,所以希望大神指点一下,程序的执行过程

phpcn_u1582
phpcn_u1582

全部回复(2)
女神的闺蜜爱上我

我理解你的问题的核心是 点击速度大于500ms,是这样的,只有在同一个元素上相继触发了mousedown mouseup事件后才会触发 click事件。 触发click事件后才会执行move()

所以你考虑的超时的情况是不会发生的。

仅有的幸福

你如果想用变量控制,最好把mark2移到最上面,容易看懂点。流程是这样的:
如果你:
点击right -----》运行异步动画-----》mark2 = false ----(0.5s后)----》mark2 = true;

所以不管你怎么点,大于0.5s还是小于0.5s,除非动画已经运行完使得mark2为true,不然if条件那里根本进不来

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号