Javascript JS函数适用于所有浏览器,但不是所有机器

Javascript JS函数适用于所有浏览器,但不是所有机器,javascript,java,zk,Javascript,Java,Zk,我在寻找可能的原因,而不是解决办法。考虑到我的情况,我不知道这种格式是否被允许,但老实说,我不知道werid行为的原因,也不知道是否有一个答案(可能没有) 我对scrollIntoView函数有一个奇怪的问题。此函数使用div元素的id引用另一个元素中的另一个div来模拟索引。我只使用Javascript来实现这一点,并在以下浏览器中进行了测试(所有浏览器都是最新版本):Firefox(开发版和常规版)、Google Chrome、Midori、Vivaldi、Edge(Chrome)和Oper

我在寻找可能的原因,而不是解决办法。考虑到我的情况,我不知道这种格式是否被允许,但老实说,我不知道werid行为的原因,也不知道是否有一个答案(可能没有)

我对scrollIntoView函数有一个奇怪的问题。此函数使用div元素的id引用另一个元素中的另一个div来模拟索引。我只使用Javascript来实现这一点,并在以下浏览器中进行了测试(所有浏览器都是最新版本):Firefox(开发版和常规版)、Google Chrome、Midori、Vivaldi、Edge(Chrome)和Opera。它以预期的方式在所有浏览器中工作,而选项在基于Chromium的浏览器中不起作用

现在,昨天我推出了一些更改,以呈现给客户。一位大四学生正在测试代码,这时他注意到scrollIntoView在他的机器上无法工作(使用最新的Chrome)。我们仔细检查了相同的代码,没有发现任何不同。我请一位前端高级人员看了一下,过了一会儿,他说没问题,但对他来说也不管用(同样是最新的Chrome)。我们没有更多的时间去看它,因为我们必须去开会。无论如何,会议期间发生了最后一件奇怪的事情:我没有显示索引,但使用scrollIntoView的其他功能在客户端机器上的Chrome中的平滑行为(一些Google Chrome。无法查找确切版本)

因此,它在我的浏览器中工作,而不是在我的高级浏览器中,但在客户端也工作

我正试图弄清楚,既然我们规范了浏览器、操作系统和工具的版本,这会发生什么。代码也很简单,老实说,我不认为软件版本有问题。此外,虽然我们客户的Chrome浏览器中的平滑滚动很奇怪,但我认为这只是因为他们的机器出于任何原因打开了该标志,但是那些在那里工作的其他功能告诉我scrollIntoView本身并不是真正的问题(有点)

我的功能(不起作用)

确实起作用的功能

function getDivInvol(id){
    var elem = zk.$('$d' + id).$n();
        estiloActual = elem.className;
        eBound = elem.getBoundingClientRect();
        pBound = zk.$('$listenerD').$n().getBoundingClientRect();
    elem.className = 'ridgeSelect ' + estiloActual;
        if(eBound.bottom >= pBound.bottom || eBound.top <= pBound.top){
            elem.scrollIntoView({behavior: "instant", block: "center"});            
        }
}
function rGetDivInvol(id){
    var div = '$i' + id;
        elem = zk.$(div).$n();
        eBound = elem.getBoundingClientRect();
        pBound = zk.$('$listenerI').$n().getBoundingClientRect();
    if(eBound.bottom >= pBound.bottom || eBound.top <= pBound.top){
            elem.scrollIntoView({block: "center"});         
        }
    $(div).effect("highlight", {color: "#7dc0ff"}, 1500);
}
函数GetDivingVol(id){ var elem=zk.$('$d'+id)。$n(); estiloActual=elem.className; eBound=elem.getBoundingClientRect(); pBound=zk.$(“$listenerD”).$n().getBoundingClientRect(); elem.className='ridgeSelect'+估计值; 如果(eBound.bottom>=pBound.bottom | | eBound.top=pBound.bottom | | eBound.top猜测: 由于您使用ZK,客户端可能会出现计时/竞速问题…ZK在客户端具有部分计时/延迟的函数来呈现/调整小部件大小。因此,即使可以检索DOM节点,也并不总是意味着它的容器已经完成了大小调整。因此,当您调用scroll-into-view函数时,它的c容器可能还没有滚动条

要调试的方法: Chrome/-ium为此类场景提供了很好的调试工具:特别是当您不确定某个函数何时被调用时(与其他函数/布局/css/网络操作相关),profiler非常有用

  • 打开开发工具
  • 切换到性能选项卡
  • 单击“记录”(左上角圆形图标)
  • 在浏览器中执行导致问题的操作
  • 单击“停止”(与“记录”按钮相同)
  • 现在你会得到很多信息
您将获得一条包含浏览器窗口内容缩略图的时间线。 下面是网络活动,再往下是一张名为“Main”的火焰图

在flame图表中,您可以搜索方法名(CTRL-F)并查看其位置。更重要的是,您可以查看其周围发生的情况(之前/之后)

在它工作的PC上做同样的操作,并比较结果……也许你会发现你的函数和其他函数的调用顺序有所不同


这可以帮助你提出一个更具体的问题。

看看浏览器控制台,肯定有什么东西影响了这些函数,甚至没有加载它们。检查的一个好方法是直接在控制台中键入函数,看看它是否返回任何内容。@hymnzy刚刚选中。函数返回“未定义”,但它可以工作。这是在所有浏览器中。向函数添加一个返回值也会返回预期值,因此至少到目前为止似乎还可以。很抱歉,回复太晚。我将尝试在我的计算机中复制错误,然后尝试另一个。我没有考虑这个错误的时间。谢谢!嘿,只是为了更新。我尝试复制错误时运气不佳。Scrip在某些机器上仍然不能工作。我的截止日期很近,所以我放弃了这个,并使用了Jquery的ScrollBy,它可以工作。想知道一些有趣的事情吗?我注意到scrollIntoView在客户端调用时不工作,但在服务器调用时工作。也就是说,我将把它作为一个周末p进行调查项目。感谢您的时间,您的指导为我指明了正确的方向。我会接受您的回答。很高兴我的评论对您有所帮助,如果它在服务器端工作,那么如果以同样的方式计时,它可能也在客户端工作-服务器只能将JS发送到客户端,它仍然在客户端执行。
function getDivInvol(id){
    var elem = zk.$('$d' + id).$n();
        estiloActual = elem.className;
        eBound = elem.getBoundingClientRect();
        pBound = zk.$('$listenerD').$n().getBoundingClientRect();
    elem.className = 'ridgeSelect ' + estiloActual;
        if(eBound.bottom >= pBound.bottom || eBound.top <= pBound.top){
            elem.scrollIntoView({behavior: "instant", block: "center"});            
        }
}
function rGetDivInvol(id){
    var div = '$i' + id;
        elem = zk.$(div).$n();
        eBound = elem.getBoundingClientRect();
        pBound = zk.$('$listenerI').$n().getBoundingClientRect();
    if(eBound.bottom >= pBound.bottom || eBound.top <= pBound.top){
            elem.scrollIntoView({block: "center"});         
        }
    $(div).effect("highlight", {color: "#7dc0ff"}, 1500);
}