2017-04-12 82 views
0

我有一個變量(initW),它取得了一些div的初始寬度(wrps)。在Javascript中保留初始變量值

有一個側面板崩潰展開事件。

崩潰時,主(中心)格(.p_ext_width)變寬。我使用它的新寬度值來設置包裝div的寬度(wrps)。

然後在側面板展開 - 我想讓它們(wrps)回到它們的初始值(initW)。

但是,此變量(initW)現在被新值(擴展寬度)覆蓋。

如何保留原始變量值?


function expand_collapse() { 
    out=document.querySelector('.p_ext_width') 
    wrps=document.getElementsByClassName('page_wrapper'); 

    var initW=window.getComputedStyle(wrps[0], null).getPropertyValue("width"); //get width before expanding 
    console.log(initW); 
    initW1=initW 

    if (x.className!="collapseme") { 
     //...... 
     function functionOne(x) { 
     var W=window.getComputedStyle(x, null).getPropertyValue("width"); 
//get width after expanding 
      for (e=0;e<wrps.length;e++){ 
       wrps[e].style.width=W; 
       } 
      } 
     function functionTwo(var1, callback) { 
      var timer = setTimeout(function() { 
      callback(var1); 
      }, 500); 
     } 
     functionTwo(out, functionOne); 
     return; 
    } 
    else { 
     for (e=0;e<wrps.length;e++){ 
      wrps[e].style.width=initW; //set back to initial width 
      console.log("new: " + initW1); 
     } 
    } 
} 
+5

創建另一個變量並在做任何計算之前存儲原始值? – Lewis

+0

新值不會被覆蓋太多嗎? (見上面的initW1)。試過了,它不工作......我做錯了什麼? – Kadjia

+0

取決於您定義它的位置。將其保留在此功能之外,只有在展開側面板之前進行設置。 – Lewis

回答

0

這裏的問題是變量的作用域,你需要使用initW爲全局變量並獲得膨脹狀態下的寬度。

//get the original width when in expended. 
var initW = window.getComputedStyle(document.getElementsByClassName('page_wrapper')[0], null).getPropertyValue("width"); 

function expand_collapse() { 
    out=document.querySelector('.p_ext_width') 
    wrps=document.getElementsByClassName('page_wrapper'); 

    if (x.className!="collapseme") { 
     //...... 
     function functionOne(x) { 
     var W=window.getComputedStyle(x, null).getPropertyValue("width"); 
//get width after expanding 
      for (e=0;e<wrps.length;e++){ 
       wrps[e].style.width=W; 
       } 
      } 
     function functionTwo(var1, callback) { 
      var timer = setTimeout(function() { 
      callback(var1); 
      }, 500); 
     } 
     functionTwo(out, functionOne); 
     return; 
    } 
    else { 
     for (e=0;e<wrps.length;e++){ 
      wrps[e].style.width=initW; //set back to initial width 
     } 
    } 
} 

在你的情況,當expand_collapse打電話來恢復原來的寬度,你發現昏倒的WRP的div寬度和分配的WRP寬度相同回來。相反,您應該在擴展狀態下分配原始寬度的wrps div。

+1

謝謝,有更多的麻煩,但範圍解決了問題! – Kadjia

0

我只是採取不同的方法。如果我需要這種東西,那麼我第一次搜索自定義屬性(我將創建)可能會被命名爲iniw以獲取所需的DOM。然後,每次我搜索屬性iniw,如果它被設置,那麼我將使用該值作爲該DOM的初始值,計算此時的初始值並將該值存儲在所提及的屬性中。這裏的初始值意味着你認爲最初的狀態,它可能是任何東西。這只是一種方法,如果你需要代碼然後請解釋一下你目前的代碼試圖做什麼,並提供html代碼片段

+0

謝謝,這實際上是有道理的,我也會試試! – Kadjia