【问题标题】:Javascript slider problemJavascript滑块问题
【发布时间】:2011-09-18 16:35:51
【问题描述】:

您好,我目前正在编写我老板给我的脚本,但它不适用于除 IE 之外的所有浏览器。

现在他正在使用 CSS 属性 left 对其进行动画处理,因此他有一个变量来获取 left 的当前值。例如让我们说left等于-100px

现在一旦有了这个值,它就会将10px 添加到该值上,使其从左侧移入。

现在我的问题在于parseInt() 和号码末尾的"px" 前缀。它不断返回 NaN 而不是 left 的值。

有人知道如何解决这个问题吗?

提前致谢


更新: 好的,我已经重写了代码和it can be viewed here,通过重写我的意思是我已经接受了我老板的代码并更改了变量名称并对其进行了评论,以便更容易理解并查看它试图用 javascript 完成什么。

现在滑块的目的是让他在 IE 中选择 DIV 从左侧滑入到位(DIV 偏移 -760px)这工作正常,但在任何其他浏览器中都没有。然而,我已经为其他浏览器想出了一个修复方法。通过从 -760 的末尾删除样式表中的px,它会导致 DIV 出现,但它不会按照应有的方式滑动。

为了方便我在这里为他们提供滑块 html 和 CSS 以提供一点帮助。

The HTML

The CSS

【问题讨论】:

  • 导致NaN的代码到底是什么?
  • w=parseInt(document.getElementById(slideDiv).style.left); if(w<0) { w=w+10; document.getElementById(slideDiv).style.left =w }
  • @robf92: 你确定.style.left 是明确设置的吗?您可能还想使用.offsetLeft
  • 我不确定你的意思是什么。但是是的,它在css中设置为默认值left: -760px;
  • 是否可以将 jquery 添加到页面?很难想象直接处理 CSS 定位变化。

标签: javascript css nan parseint


【解决方案1】:

使用parseFloat 代替parseInt

【讨论】:

  • 我刚刚尝试提醒 parseFloat("-170px");在我的控制台中,它运行良好。 “document.getElementById(slideDiv).style.left”的实际值是多少,因为我认为这不正确
【解决方案2】:

你可以试试这样的:

// should return e.g. "10px":
var valueAsString = document.getElementById('slideDiv').style.left;

// remove "px" at the end, so w will only contain "10":
numericPartOfValue = value.substring(0, value.length - 2);
var w = parseInt(numericPartOfValue);

if(w < 0) { 
   w = w+10; 
   // Note: Updated after the comment below:
   document.getElementById(slideDiv).style.left =w + "px";
}

【讨论】:

  • 嗯,谢谢,但是在 IE 中使用它也会破坏它 为什么 Javascript 必须如此麻烦? D:我只是要发布整个 javascript 文件。正如我所说,它是由我的老板而不是我写的。目前我的 Javascript 知识相当基础link to pastebin 我发现的一件事是从 CSS 文件中删除“px”可以使其工作(滑块发生变化但没有“滑入”动画)我也会感谢大家迄今为止的帮助,你们都是很棒的人,我非常感激。谢谢大家:)
  • 如果我正确理解了您的问题,那么我刚刚所做的更改应该可以解决它(参见代码注释):在处理完数值后,只需在末尾再次添加“px” .
  • 不,仍然不工作,好吧,我说不工作,IE 现在动画到大约 1/7,然后它就停止了,所有其他浏览器仍然不工作,谢谢。
  • 如果我们能看到它应该如何工作,可能会更容易帮助你。也许您也可以提供一些 HTML?
  • 对不起,我离开了工作,完全忘记了这件事。那么你需要什么 HTML 呢?只是被“滑动”的div?也正如我正在考虑的那样,我认为它必须与 slideDiv 相关,因为其他人已经说过 parseInto 应该删除“px”,并且在测试时它是正确的。我还认为这与使用zIndex 而不是z-index 有关,因为我在某处读到它可能会导致其他浏览器出现问题,但是在更改它后它会在Firefox 和IE 中中断,所以我的怀疑在于slideDiv。
【解决方案3】:

尝试捕捉

try{
  w=parseInt(document.getElementById("slideDiv").style.left+"make me string");
}catch(e){
  w=0;
  alert(e.toString());
}

【讨论】:

  • 我遇到的问题是它没有获取元素的当前位置,因为它返回 -760px,这显然不是整数,因为“px”
  • 对不起,我一开始看错了,但是 parseInt 的工作是在字符串中查找数字,而不考虑字母字符。
  • 试过这个并且警报返回: TypeError: document.getElementById("slideDiv") is null @Tank 啊,这是我第一次接触 Javascript,我现在的职位是软件开发的学徒公司所以对我来说这一切都让我感到困惑:D
  • 那个错误是说“slideDiv”不存在。这可能是由于“slideDiv”尚未加载。查看 jQuery 和 $(document).ready(function(){...});在运行代码之前等待加载html。
  • 确保代码已加载的快速而肮脏的方法是将您的javascript代码一直放在页面底部,就在
猜你喜欢
  • 1970-01-01
  • 2016-08-01
  • 2011-05-14
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多