【问题标题】:Unable to change page style via JavaScript无法通过 JavaScript 更改页面样式
【发布时间】:2013-12-11 00:17:47
【问题描述】:

我在从脚本中获取值时遇到问题,在我的网站上进行更改。我想要完成的是允许用户滚动浏览我页面上的某些元素,向左或向右滚动。请记住,我对 JavaScript 不是很好,所以这是我目前所掌握的。

window.onload = makeActive;
function makeActive() {
var showCase = document.getElementById("showcase");
var slides = showCase.getElementsByTagName("div");
var mouseDown = false;
if(window.addEventListener) {
    showCase.addEventListener('mousedown',startDrag,false);
    document.body.addEventListener('mousemove',drag,false);
    document.body.addEventListener('mouseup',stopDrag,false);
}
else if(window.attachEvent) {
    showCase.attachEvent('onmousedown',startDrag);
    document.body.attachEvent('onmousemove',drag);
    document.body.attachEvent('onmouseup',stopDrag);
}
function startDrag(e) {
    mouseDown = true;
}
function drag(e) {
    if(mouseDown == true) {
        for(var i=0; i < slides.length; i += 1) {
            slides[i].style.left -= e.clientX + "px";
        }
    }
}
function stopDrag(e) {
    mouseDown = false;
    }
}

所以基本上它的作用是选择我的 showCase 元素中的所有 div 元素。它继续检查我的鼠标是否悬停在它上面,如果是,它将检查我的鼠标是否已按下,如果我的鼠标按钮已按下,它将检查我的鼠标是否向左或向右移动。这一切都很好,但是当我尝试循环浏览我的幻灯片时,当我尝试对幻灯片做任何形式的方程式时,问题就出现了,它给了我一个解析错误。我认为这是因为当我尝试引用 slides[i].style.left 作为字符串出现时。我尝试将其解析为数字形式,并且 剥离它的字符,但这似乎不起作用。我也尝试使用“leftoffset”来获取值,但无论我做什么,它都会给我一个错误,即“style.left 未定义”、“NaN”或“解析错误:声明已删除”。有没有更简单的方法来做到这一点?

【问题讨论】:

  • 您是否考虑过使用 JQuery 来简化这段代码?
  • 我不熟悉 Jquery,但这是我目前正在研究的东西。是的,我知道这不是正确的公式,此时我只是想让它做点什么。

标签: javascript css styles numbers undefined


【解决方案1】:

我相信是这一行:

slides[i].style.left -= e.clientX + "px";

如果slides[i].style.left 的值类似于10px,则不能减去整数值。您需要先删除“px”:

var leftPos = 0;
if(slides[i].style.left) {
    leftPos =  slides[i].style.left.toString().replace(/(px)/i, "");
}
slides[i].style.left = (leftPos - e.clientX) + "px";

【讨论】:

  • 感谢您的帮助,我相信这在理论上可以解决我的问题,但是我收到错误消息,指出“TypeError: slides[i].style.left.replaceAll is not一个函数”,我已经尝试过几次,但方式略有不同,但无论我如何使用任何正则表达式函数,我似乎都会遇到类型错误。
  • 抱歉,我将它与 Java replaceAll 方法混淆了。请改用replace。我更新了答案。您也可以使用slides[i].style.left.toString().replace(...) 将其转换为字符串。
  • 谢谢!感谢您的帮助,这解决了我遇到的核心问题,即改变左侧位置的值。我必须弄清楚为什么将值设置为 -55,000 - -60,000。但这应该很容易,因为我可以更改周围的值。
  • 所以请您接受这个答案,以便告诉未来的用户这个答案是正确的。谢谢你:)
猜你喜欢
  • 2013-10-06
  • 2013-12-26
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多