2017-09-04 86 views
0

我試圖做JS一個基本的切換點擊...我有這個如果語句不起作用,爲什麼要放入樣式?

<div id="box"></div> 
<button id="btn"></button> 

#box { 
    background: black; 
    width: 50px; 
    height: 50px; 
    position: absolute; 
    left: 50px; 
} 

JS:

var btn = document.getElementById('btn'); 
var box = document.getElementById('box'); 

btn.addEventListener('click', function(){ 

    if (box.style.left === '50px') { 
    box.style.left = '200px'; 
    } 

    if (box.style.left === '200px') { 
    box.style.left = '50px'; 
    } 

}); 

我看着它,這似乎是每個人的方法爲使用切換點擊純js,所以我不知道爲什麼它不適合我,任何想法?

回答

1

@ Dekel的回答已經解釋了你的代碼出了什麼問題。但是,您應該使用類來處理。這不僅是方式比檢索window.getComputedStyle快,它也更容易

var btn = document.getElementById('btn'); 
 
btn.addEventListener('click', function() { 
 
    var box = document.getElementById('box'); 
 
    box.classList.toggle('left-50'); 
 
    box.classList.toggle('left-200'); 
 
});
.left-50 { 
 
    left: 50px; 
 
} 
 

 
.left-200 { 
 
    left: 200px; 
 
} 
 

 
#box { 
 
    background: black; 
 
    width: 50px; 
 
    height: 50px; 
 
    position: absolute; 
 
}
<div id="box" class="left-50"></div> 
 
<button id="btn">bt</button>

2
  1. 您應該使用window.getComputedStyle,而不是(這樣你會得到應用於元素的樣式的實際價值,而不僅僅是什麼是對style屬性)..
  2. 你缺少一個else有(否則你總是會得到兩個if並沒有什麼會改變)

var btn = document.getElementById('btn'); 
 
var box = document.getElementById('box'); 
 

 
btn.addEventListener('click', function(){ 
 
    if (window.getComputedStyle(box).left === '50px') { 
 
    box.style.left = '200px'; 
 
    } else if (window.getComputedStyle(box).left === '200px') { 
 
    box.style.left = '50px'; 
 
    } 
 

 
});
#box { 
 
    background: black; 
 
    width: 50px; 
 
    height: 50px; 
 
    position: absolute; 
 
    left: 50px; 
 
}
<div id="box"></div> 
 
<button id="btn"></button>

+0

如果性能是很重要的,'getComputedStyle'可能比訪問樣式屬性,因爲它會導致重新計算的風格更慢。取決於您需要多大的靈活性以及性能是否符合您的使用案例。 – philraj

0

更好地使用膠印。在這邊你正在做一種切換操作。同時,我修改了你的腳本使其工作:

<div id="box"></div> 
<input type="button" id="btn" value=" Try it "> 
<style> 
#box { 
    background: black; 
    width: 50px; 
    height: 50px; 
    position: absolute; 
    left: 50px; 
} 

</style> 

<script> 
var btn = document.getElementById('btn'); 
var box = document.getElementById('box'); 

btn.addEventListener('click', function(){ 


    if (box.offsetLeft == 50) { 
     box.style.left = 200 ; 

    } 
    else if (box.offsetLeft == 200) { 
     box.style.left = 50; 

    } 


}); 
</script> 
+0

這將是完美的,但我在實際代碼中使用%而不是px,所以使用偏移量可能會非常棘手:/ –

+0

我沒有看到%。任何方式,請你澄清你的要求。我看到你正在切換位置。你認爲jQuery的toggle()函數? –