在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js使用setTimeout不執(zhí)行?

js使用setTimeout不執(zhí)行?

我要在移動端實現(xiàn)點擊按鈕顏色變化的(類似pc的hover效果)效果,點擊后顏色變化停留一秒鐘,然后變回去?

第一種方法
var icon_timer;
$('.nav li .glyphicon-menu-down').on('click', function(e) {
    if ($(window).width() < 991) {
        $(this).addClass('touch-hov');
        clearTimeout(icon_timer);
        icon_timer = setTimeout(function() {$(this).removeClass('touch-hov')},1000);
    }
});
發(fā)現(xiàn)settimeout中的的removeclass總是不執(zhí)行?

第二種方法
$('.nav li>div').on('touchstart click', function(e) {
    if ($(window).width() < 991) {
        e.stopPropagation();
        $(this).addClass('touch-hov');
        clearTimeout(div_timer);
    }
});
$('.nav li>div').on('touchend', function() {
    div_timer = setTimeout(function() {$(this).removeClass('touch-hov')},1000);
});

使用這種方法有時不進入touchend事件,進去了 setTimeout也不執(zhí)行?不知道是什么原因造成的?
回答
編輯回答
網(wǎng)妓

settimeout 匿名函數(shù)里面的this指向不對。。不是你操作的dom對象

2017年4月26日 23:42
編輯回答
笨笨噠

setTimeout里console.log(this),看下this是什么。

2017年11月5日 23:54
編輯回答
舊言

this綁定問題

$('.nav li .glyphicon-menu-down').on('click', function(e) {
    var $el = $(this);
    if ($(window).width() < 991) {
        $(this).addClass('touch-hov');
        clearTimeout(icon_timer);
        icon_timer = setTimeout(function() {$el.removeClass('touch-hov')},1000);
    }
});
2018年3月23日 14:50
編輯回答
焚音

為何不用CSS3做?
根據(jù)你的需求,add class之后CSS3的animation以及transition 是完全可以實現(xiàn)你想要的效果
參考 CSS3 transition 以及 Animation屬性

--update2
至于你的問題,屬于this指向問題,你可以自己debugger看看this是什么

2017年6月6日 10:14
編輯回答
涼汐

定時器中的this是指向window的,要好好記住,

2017年2月22日 05:24
編輯回答
尐飯團

延時器中的this指向不對,可以在外面用變量存儲

sf每天都有n個this指向問題。。。

2018年7月26日 19:43
編輯回答
凝雅

要用this,開始時最好來一波這樣的操作—————— var that = this

2018年5月27日 16:59
編輯回答
紓惘
$('.nav li>div').on('touchend', function() {
    var that = this
    div_timer = setTimeout(function() {$(that).removeClass('touch-hov')},1000);
});
2017年11月6日 05:12