gpt4 book ai didi

javascript - jQuery 插件回调 $this 不能返回元素

转载 作者:行者123 更新时间:2023-11-30 10:01:36 25 4
gpt4 key购买 nike

我正在学习编写一个迷你 jQuery 插件工具。

我的插件帮助用户检查用户鼠标滚轮是否向上滚动或向下滚动以触发回调函数。

我有四个 div,当我的鼠标指针悬停在上面并用鼠标滚轮向上滚动时,插件回调将改变这个 div 的背景颜色。

不幸的是,我的回调的 $this 无法指向该元素。我需要一些帮助。

风格

    body {background: #2A2B30;}
.wrapper {margin-top: 100px;}
.wrapper div.content {border-radius: 7px; border: 1px solid #000; min-height: 300px; margin-top: 30px; background: #ededed; padding: 30px; font-size: 20px;}

HTML

    <div class="container">
<div class="wrapper clearfix">
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-12 content-wrapper">
<div class="blk content"> </div>
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-12 content-wrapper">
<div class=" content"> </div>
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-12 content-wrapper">
<div class="blk content"> </div>
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-12 content-wrapper">
<div class=" content"> </div>
</div>
</div>
</div>

调用插件

$(function() {
$('.blk').scroll({
lastAnimation : 0,
quietPeriod : 500,
animationTime : 800,
ScrollUp : function() {
$(this).css('background', 'red');
},
ScrollDown : function() {
alert('Scroll Down');
}
});
});

我的插件

(function($) {
$.fn.scroll = function( options ) {

var settings = $.extend({
// selector : $(this),
lastAnimation : null,
quietPeriod : null,
animationTime : null,
ScrollUp : null,
ScrollDown : null
}, options);

return this.each( function() {
var lastAnimation = settings.lastAnimation;
var quietPeriod = settings.quietPeriod;
var animationTime = settings.animationTime;

function init(event, delta) {
deltaOfInterest = delta;
var timeNow = new Date().getTime();
if( timeNow - lastAnimation < quietPeriod + animationTime ) {
event.preventDefault();
return;
}

if ( deltaOfInterest < 0 ) {
// Call Back
if ( $.isFunction( settings.ScrollUp ) ) {
settings.ScrollUp.call(this);
}
} else {
// Call Back
if ( $.isFunction( settings.ScrollDown ) ) {
settings.ScrollDown.call(this);
}
}

lastAnimation = timeNow;
}

$(this).bind('mousewheel DOMMouseScroll', function(event) {
event.preventDefault();
var delta = event.originalEvent.wheelDelta || -event.originalEvent.detail;
init(event, delta);
});

});
}
}(jQuery));

最佳答案

这是因为 settings.ScrollUp.call(this); 这里 this 不是指 div 它的内部函数所以 this 变成了init 内部函数中的其他内容试试这个:-

  return this.each( function() {
var $this=this; // create variable here
.....
.....
settings.ScrollUp.call($this); //use it here like this in init function

Demo

关于javascript - jQuery 插件回调 $this 不能返回元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31340479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com