JQuery 如果 css 条件不工作
JQuery if condition on css not working
我有一个服务器每 50 毫秒发送一次状态更新。
我想将我页面上的按钮设置为显示相应的状态。
我有
if (data.playspeed == 100) {
console.log("play");
$('#prev').css('background-image','url(../public/images/skipr.png)');
$('#next').css('background-image','url(../public/images/skipf.png)');
$('#rwd').css('background-image','url(../public/images/rwdbutton.png)');
$('#stop').css('background-image','url(../public/images/stopbutton.png)');
$('#play').css('background-image','url(../public/images/playbutton-active.png)');
$('#ffwd').css('background-image','url(../public/images/ffwdbutton.png)');
}
并且它按预期工作。问题:在 ipad 上,按钮闪烁,因为图像刷新过于频繁。
所以我将代码更改为:
if (data.playspeed == 100) {
if ($('#play').css('background-image') != 'url(../public/images/playbutton-active.png)') {
console.log("play");
$('#prev').css('background-image','url(../public/images/skipr.png)');
$('#next').css('background-image','url(../public/images/skipf.png)');
$('#rwd').css('background-image','url(../public/images/rwdbutton.png)');
$('#stop').css('background-image','url(../public/images/stopbutton.png)');
$('#play').css('background-image','url(../public/images/playbutton-active.png)');
$('#ffwd').css('background-image','url(../public/images/ffwdbutton.png)');
}
}
我的逻辑:如果播放按钮尚未设置为活动状态,则仅将按钮更新为播放状态。
但它不起作用,我不知道为什么。
console.log 仍然每次都会触发(并且按钮仍然闪烁)。
为什么?
在 jquery 中减少使用背景 属性 或任何其他 css 属性 是否使用添加 class 并检查因为 属性 创建html 和 classes 中的内联样式必须是可重用的,我们在 class
中使用任何地方
$('#prev').addClass('prev');
在css
.prev{
background-image : 'url(../public/images/skipr.png)' ;
}
如果您使用 hasClass().it returns 布尔值
检查 jquery
if (data.playspeed == 100) {
if($(#prev).hasClass(prev)){
}
// if condition here like that
}
该行为的发生是因为浏览器将相对 url 更改为绝对。
另外,如果CSS中的背景图片是../test.png
,.css()
会returnhttp://www.example.com/parents/of/current/folder/test.png
。
只需获取文件名并进行比较即可:
if ($('#play').css('background-image').split('/').pop() != 'playbutton-active.png)')
//The ending parenthesys is still there though...
但是有一个问题,没有浏览器以同样的方式工作。所以也许这种情况不会起作用,因为某些浏览器将 URL 括在引号之间。
话虽这么说,做您想做的事的最好方法是使用旗帜。您可以使用 class 作为标志:
if (data.playspeed == 100) {
if (!$('#play').hasClass('active')) {
console.log("play");
$('#prev').css('background-image','url(../public/images/skipr.png)');
$('#next').css('background-image','url(../public/images/skipf.png)');
$('#rwd').css('background-image','url(../public/images/rwdbutton.png)');
$('#stop').css('background-image','url(../public/images/stopbutton.png)');
$('#play').css('background-image','url(../public/images/playbutton-active.png)')
.addClass('active');
$('#ffwd').css('background-image','url(../public/images/ffwdbutton.png)');
}
}
这样,您就可以确定无论使用哪种浏览器,它都能正常工作。
我建议不要使用样式本身进行检查,因为浏览器很容易纠正微小的错误,这意味着事情并不完全符合预期。以下是我的建议:
if (data.playspeed == 100) {
if (!$('#play').hasClass("js-activated")) {
$('#play').addClass("js-activated");
console.log("play");
$('#prev').css('background-image','url(../public/images/skipr.png)');
$('#next').css('background-image','url(../public/images/skipf.png)');
$('#rwd').css('background-image','url(../public/images/rwdbutton.png)');
$('#stop').css('background-image','url(../public/images/stopbutton.png)');
$('#play').css('background-image','url(../public/images/playbutton-active.png)');
$('#ffwd').css('background-image','url(../public/images/ffwdbutton.png)');
}
}
将 class 添加到您的播放按钮并检查它。但是,这样做时最好将整个背景声明移动到外部 CSS 文件中,而不是使用 javascript 设置它。
我建议将这些行添加到您的 CSS:
#prev.js-activated { background-image: url(../public/images/skipr.png); }
#next.js-activated { background-image: url(../public/images/skipf.png); }
#rwd.js-activated { background-image: url(../public/images/rwdbutton.png); }
#stop.js-activated { background-image: url(../public/images/stopbutton.png); }
#play.js-activated { background-image: url(../public/images/playbutton-active.png); }
#ffwd.js-activated { background-image: url(../public/images/ffwdbutton.png)');
(不过请确保您的路径来自 CSS 文件!)
并用以下内容替换您的 JS:
if (data.playspeed == 100 && !$('#play').hasClass("js-activated")) {
$('#play, #next, #rwd, #stop, #prev, #ffwd').addClass("js-activated");
}
这使您的 JS 和 CSS 更易于解析和分离。
我有一个服务器每 50 毫秒发送一次状态更新。
我想将我页面上的按钮设置为显示相应的状态。
我有
if (data.playspeed == 100) {
console.log("play");
$('#prev').css('background-image','url(../public/images/skipr.png)');
$('#next').css('background-image','url(../public/images/skipf.png)');
$('#rwd').css('background-image','url(../public/images/rwdbutton.png)');
$('#stop').css('background-image','url(../public/images/stopbutton.png)');
$('#play').css('background-image','url(../public/images/playbutton-active.png)');
$('#ffwd').css('background-image','url(../public/images/ffwdbutton.png)');
}
并且它按预期工作。问题:在 ipad 上,按钮闪烁,因为图像刷新过于频繁。 所以我将代码更改为:
if (data.playspeed == 100) {
if ($('#play').css('background-image') != 'url(../public/images/playbutton-active.png)') {
console.log("play");
$('#prev').css('background-image','url(../public/images/skipr.png)');
$('#next').css('background-image','url(../public/images/skipf.png)');
$('#rwd').css('background-image','url(../public/images/rwdbutton.png)');
$('#stop').css('background-image','url(../public/images/stopbutton.png)');
$('#play').css('background-image','url(../public/images/playbutton-active.png)');
$('#ffwd').css('background-image','url(../public/images/ffwdbutton.png)');
}
}
我的逻辑:如果播放按钮尚未设置为活动状态,则仅将按钮更新为播放状态。
但它不起作用,我不知道为什么。 console.log 仍然每次都会触发(并且按钮仍然闪烁)。
为什么?
在 jquery 中减少使用背景 属性 或任何其他 css 属性 是否使用添加 class 并检查因为 属性 创建html 和 classes 中的内联样式必须是可重用的,我们在 class
中使用任何地方 $('#prev').addClass('prev');
在css
.prev{
background-image : 'url(../public/images/skipr.png)' ;
}
如果您使用 hasClass().it returns 布尔值
检查 jqueryif (data.playspeed == 100) {
if($(#prev).hasClass(prev)){
}
// if condition here like that
}
该行为的发生是因为浏览器将相对 url 更改为绝对。
另外,如果CSS中的背景图片是../test.png
,.css()
会returnhttp://www.example.com/parents/of/current/folder/test.png
。
只需获取文件名并进行比较即可:
if ($('#play').css('background-image').split('/').pop() != 'playbutton-active.png)')
//The ending parenthesys is still there though...
但是有一个问题,没有浏览器以同样的方式工作。所以也许这种情况不会起作用,因为某些浏览器将 URL 括在引号之间。
话虽这么说,做您想做的事的最好方法是使用旗帜。您可以使用 class 作为标志:
if (data.playspeed == 100) {
if (!$('#play').hasClass('active')) {
console.log("play");
$('#prev').css('background-image','url(../public/images/skipr.png)');
$('#next').css('background-image','url(../public/images/skipf.png)');
$('#rwd').css('background-image','url(../public/images/rwdbutton.png)');
$('#stop').css('background-image','url(../public/images/stopbutton.png)');
$('#play').css('background-image','url(../public/images/playbutton-active.png)')
.addClass('active');
$('#ffwd').css('background-image','url(../public/images/ffwdbutton.png)');
}
}
这样,您就可以确定无论使用哪种浏览器,它都能正常工作。
我建议不要使用样式本身进行检查,因为浏览器很容易纠正微小的错误,这意味着事情并不完全符合预期。以下是我的建议:
if (data.playspeed == 100) {
if (!$('#play').hasClass("js-activated")) {
$('#play').addClass("js-activated");
console.log("play");
$('#prev').css('background-image','url(../public/images/skipr.png)');
$('#next').css('background-image','url(../public/images/skipf.png)');
$('#rwd').css('background-image','url(../public/images/rwdbutton.png)');
$('#stop').css('background-image','url(../public/images/stopbutton.png)');
$('#play').css('background-image','url(../public/images/playbutton-active.png)');
$('#ffwd').css('background-image','url(../public/images/ffwdbutton.png)');
}
}
将 class 添加到您的播放按钮并检查它。但是,这样做时最好将整个背景声明移动到外部 CSS 文件中,而不是使用 javascript 设置它。
我建议将这些行添加到您的 CSS:
#prev.js-activated { background-image: url(../public/images/skipr.png); }
#next.js-activated { background-image: url(../public/images/skipf.png); }
#rwd.js-activated { background-image: url(../public/images/rwdbutton.png); }
#stop.js-activated { background-image: url(../public/images/stopbutton.png); }
#play.js-activated { background-image: url(../public/images/playbutton-active.png); }
#ffwd.js-activated { background-image: url(../public/images/ffwdbutton.png)');
(不过请确保您的路径来自 CSS 文件!) 并用以下内容替换您的 JS:
if (data.playspeed == 100 && !$('#play').hasClass("js-activated")) {
$('#play, #next, #rwd, #stop, #prev, #ffwd').addClass("js-activated");
}
这使您的 JS 和 CSS 更易于解析和分离。