我无法找到解决方案,但是mousedown之后的第二个将无效。我已经看到了绑定它的不同之处,但我没有运气。 (它适用于代码中的其他任何位置)。
$(".rightArrow").click(function () {
var stop_slide = parseInt($(this).prev().css("marginLeft"));
scroll_size = $(this).prev().children().size() * 177 * -1;
if(stop_slide > scroll_size){
var int00; // declared here to make it visible to clearInterval.
$(this).mousedown(function(){
int00 = setInterval(function() {
$(this).prev().css( { marginLeft : "-=1px" } );
}, 1);
}).mouseup(function() {
clearInterval(int00);
});
}
});
答案 0 :(得分:1)
this
中的setInterval
与this
中的mousedown
不同。只需使用self
变量,就这样:
$(".rightArrow").click(function() {
var stop_slide = parseInt($(this).prev().css("marginLeft"));
scroll_size = $(this).prev().children().size() * 177 * -1;
if (stop_slide > scroll_size) {
var int00; // declared here to make it visible to clearInterval.
$(this).mousedown(function() {
var self = this;
int00 = setInterval(function() {
$(self).prev().css({
marginLeft: "-=1px"
});
}, 1);
}).mouseup(function() {
clearInterval(int00);
});
}
});
通过function
语句声明的每个函数都有自己的上下文(this
),因此,您需要将前一个上下文存储到一个变量中,以便在另一个函数中访问它。
另一种方法是使用bind:
int00 = setInterval(function () {
$(this).prev().css(...);
}.bind(this));
这会将当前上下文(当前this
)绑定到setInterval
回调。
如果您使用es2015,则可以使用箭头功能:
// the `this` from here
int00 = setInterval(() => {
// will be the `this` from here
});
箭头函数没有上下文 - 它们继承当前上下文。