2017-04-12 112 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