Angular JS 条件逻辑检查 "class name" 是否存在
Angular JS conditional logic to check "class name" exists
Angular 下面的 JS 代码在 Mouseover 和 Mouseout 上运行良好。在 JS 代码上添加条件逻辑方面需要帮助。
如果 class 名称 "active" 存在,img src 路径必须在 "overImg" 中,即使用户 mouseover 和 mouseout。但是,一旦用户从元素中移出鼠标,当前行为就会删除 overImg。活动状态必须不同于导航元素的其余部分。
AngularJS:
.directive('eleHoverAction', function() {
return {
link: function (scope, elem, attrs) {
var imgObj = $(elem).find('img');
var upImg = attrs.eleUpImgSrc;
var overImg = attrs.eleOverImgSrc;
elem.bind('mouseover', function () {
$(imgObj).attr("src", overImg);
scope.$apply();
});
elem.bind('mouseout', function() {
$(imgObj).attr("src", upImg);
scope.$apply();
});
}
};
});
HTML:
<li class="menu-item menu-item--category active" ele-hover-action ele-up-img-src="images/test1.png" ele-over-img-src="images/test1-over.png">
<a href="#"><img src="images/test1.png" oversrc="images/test1-over.png" alt=""/><span>Test1</span></a>
</li>
<li class="menu-item menu-item--category" ele-hover-action ele-up-img-src="images/test2.png" ele-over-img-src="images/test2-over.png">
<a href="#"><img src="images/test2.png" oversrc="images/test2-over.png" alt=""/><span>Test2</span></a>
</li>
最明显的方法是向您的 "mouseout" 处理程序添加一个 if
语句来检查元素 hasClass
是否处于活动状态:
.directive('eleHoverAction', function() {
return {
link: function (scope, elem, attrs) {
var imgObj = elem.find('img');
var upImg = attrs.eleUpImgSrc;
var overImg = attrs.eleOverImgSrc;
elem.bind('mouseover', function () {
imgObj.attr("src", overImg);
scope.$apply();
});
elem.bind('mouseout', function() {
if (!elem.hasClass("active")) {
imgObj.attr("src", upImg);
}
scope.$apply();
});
if (elem.hasClass("active")) {
imgObj.attr("src", overImg);
} else {
imgObj.attr("src", upImg);
}
}
};
});
我继续根据指令属性设置图像的 src
属性。如果你不想要它,你可以把它拿掉。此外,在 jQuery 调用中包装 elem
是多余的,因为 Angular 元素已经包装在 jQuery(如果在 Angular 加载时可用)或其自己的 jQLite .否则,您将无法调用 elem.bind
.
Angular 下面的 JS 代码在 Mouseover 和 Mouseout 上运行良好。在 JS 代码上添加条件逻辑方面需要帮助。
如果 class 名称 "active" 存在,img src 路径必须在 "overImg" 中,即使用户 mouseover 和 mouseout。但是,一旦用户从元素中移出鼠标,当前行为就会删除 overImg。活动状态必须不同于导航元素的其余部分。
AngularJS:
.directive('eleHoverAction', function() {
return {
link: function (scope, elem, attrs) {
var imgObj = $(elem).find('img');
var upImg = attrs.eleUpImgSrc;
var overImg = attrs.eleOverImgSrc;
elem.bind('mouseover', function () {
$(imgObj).attr("src", overImg);
scope.$apply();
});
elem.bind('mouseout', function() {
$(imgObj).attr("src", upImg);
scope.$apply();
});
}
};
});
HTML:
<li class="menu-item menu-item--category active" ele-hover-action ele-up-img-src="images/test1.png" ele-over-img-src="images/test1-over.png">
<a href="#"><img src="images/test1.png" oversrc="images/test1-over.png" alt=""/><span>Test1</span></a>
</li>
<li class="menu-item menu-item--category" ele-hover-action ele-up-img-src="images/test2.png" ele-over-img-src="images/test2-over.png">
<a href="#"><img src="images/test2.png" oversrc="images/test2-over.png" alt=""/><span>Test2</span></a>
</li>
最明显的方法是向您的 "mouseout" 处理程序添加一个 if
语句来检查元素 hasClass
是否处于活动状态:
.directive('eleHoverAction', function() {
return {
link: function (scope, elem, attrs) {
var imgObj = elem.find('img');
var upImg = attrs.eleUpImgSrc;
var overImg = attrs.eleOverImgSrc;
elem.bind('mouseover', function () {
imgObj.attr("src", overImg);
scope.$apply();
});
elem.bind('mouseout', function() {
if (!elem.hasClass("active")) {
imgObj.attr("src", upImg);
}
scope.$apply();
});
if (elem.hasClass("active")) {
imgObj.attr("src", overImg);
} else {
imgObj.attr("src", upImg);
}
}
};
});
我继续根据指令属性设置图像的 src
属性。如果你不想要它,你可以把它拿掉。此外,在 jQuery 调用中包装 elem
是多余的,因为 Angular 元素已经包装在 jQuery(如果在 Angular 加载时可用)或其自己的 jQLite .否则,您将无法调用 elem.bind
.