我的AngularJS指令中有一个事件处理程序:
angular.element($window).on("wheel", onScrollAction);
在指令中的
onScrollAction
之前,我已经定义了一些变量,而不是onScrollAction
函数本身,因为我不想在每个wheel事件上分配它们,因为它们不应该更改。app.directive('scroll', function ($window) {
return function(scope, element, attrs) {
var elem = angular.element(document.querySelectorAll('.titletitle')).eq(1);
var elemHeight = elem[0].scrollHeight;
//so on until the 5th element
//then object to store all the elements and their heights:
var theObject = [{el:elem,elH:elemHeight},{el:elem2,elH:elem2Height},{el:elem3,elH:elem3Height},{el:elem4,elH:elem4Height},{el:elem5,elH:elem5Height}]
var theActiveElem = theObject[0];
var onScrollAction = function (event) {
console.log(theActiveElem) //renders undefined
console.log(elem) // renders the element
我的问题是,当
elem
不在时,从全局范围转到函数范围的theActiveElem
效果如何?如何解决它,以便可以在事件处理程序中对theActiveElem
进行操作。谢谢。
最佳答案
这对我来说真的很奇怪,想解释一下...
我在事件处理程序中的控制台日志如下所示:
console.log(theActiveElem,theObject); //theActiveElement undefined
thepatch = Math.floor(theoffset/theActiveElem.elH)
if(thepatch==1){
var theActiveElem = theObject[thepatch];
console.log(theActiveElem);
}
但是,一旦我将
var theActiveElem = theObject[thepatch];
更改为theActiveElem = theObject[thepatch];
,它就修复了。我知道我不应该在那一行用
var
声明它,但是为什么会在几行中导致日志错误呢?无论如何,现在解决了。