css 元素在浏览器中不改变[关闭]

kuarbcqp  于 2023-03-25  发布在  其他
关注(0)|答案(2)|浏览(156)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
我想做的是让我的联系人表单在按钮点击时可见。问题是代码只在控制台工作,值在变化,我可以通过在console.log中查看它来看到。但是div元素没有改变它的位置。我甚至试着让它成为display: flex;display:none;,但得到了相同的结果。有什么建议吗?
代码:

var btnK = document.getElementById("K");
var contact = document.querySelector("#contactTab");
var contactTab = getComputedStyle(contact).left;

btnK.addEventListener("click", contactFun);

var contactOff = 3000 + "px";
var contactOn = 650 + "px";

function contactFun() {
    if (contactTab == contactOff) {
        contactTab = contactOn;
        console.log("Changing from none to flex . Succes");
        console.log(contactTab);
    } else if (contactTab == contactOn) {
        contactTab = contactOff;
        console.log("Changing from flex to none . Succes");
        console.log(contactTab);
    }
}
aelbi1ox

aelbi1ox1#

**解决方案:**需要对选中的元素应用样式,即contact
**解释:**基于您上面分享的源代码,您没有在if-else块中对HTML应用任何新内容。

contactFun()函数中,只需将contactTab变量设置为contactOncontactOff
return contactOn;
然后,你只需登录到控制台。
console.log(contactTab);
因此,将它们应用于if-else内部或外部的HTML元素;随你喜欢。

k3bvogb1

k3bvogb12#

您的代码正在更新变量“contactTab”的内容以包含不同的字符串。
您似乎在想,因为最初是通过阅读#contactTab元素的getComputedStyle来填充该变量的,所以更改它将更新DOM中的样式。变量只包含一个字符串,它不再是一个连接到页面的指针。你需要显式地将该值设置回DOM。
(同时,'left'属性只影响定位元素,即位置为relativeabsolutefixed的元素-如果元素不具有这些值之一,则设置其left属性将不起作用。

var btnK = document.getElementById("K");
var contact = document.querySelector("#contactTab");
var contactTab = getComputedStyle(contact).left;

// I changed these values to make the results visible in a code snippet here
var contactOff = 100 + "px";
var contactOn = 0 + "px";

btnK.addEventListener("click", contactFun);

function contactFun() {
  if (contactTab == contactOff) {
    contactTab = contactOn;
    console.log(contactTab);
  } else {
    contactTab = contactOff;
    console.log(contactTab);
  }
  contact.style.left = contactTab;
}
#contactTab {
  position: absolute;
  left: 100px
}
<button id="K">click me</button>
<div id="contactTab">contactTab</div>

还要注意,你编写代码的方式相当脆弱:“if”和“else”都查找特定的值,这意味着如果初始值与其中任何一个不完全匹配,则不会发生任何事情。从DOM阅读时经常会发生这种情况-浏览器并不总是以您期望的相同单位或格式报告内容。(在上面的代码示例中,我通过使else成为一个包罗万象的值而不是查找特定的值来回避这一点。)
第二个脆弱点是首先在JS中这样做:布局中的任何更改也需要更新此javascript -通常在执行此类操作时,更安全的方法是切换CSS类的开和关,而不是直接设置样式值。这简化了您的javascript,并保留了CSS中包含的所有样式特定规则,可以安全地修改这些规则而不会破坏脚本:
一个一个三个一个一个一个一个一个四个一个一个一个一个一个五个一个

相关问题