发布网友 发布时间:2022-04-23 14:29
共4个回答
懂视网 时间:2022-04-23 18:50
首先定义了一个全局函数Locating,又在Locating内定义了一个局部函数pageScroll,然后我全局函数调用pageScroll时,报错Uncaught ReferenceError: pageScroll is not defined。代码如下:
function Locating(locate,time){ console.log(locate+' -- '+time); var p_locate=document.getElementById(locate); var window_top_y = document.body.scrollTop;//获取滚动条顶部距离页面顶部的距离 var element_top_y = p_locate.offsetTop;//获取某元素顶部距离页面顶部的距离 var distance = window_top_y-element_top_y;//当前窗口与顶部的距离 var time = time; var move_distance = time>50?Math.ceil((distance/Math.ceil(time/50))):distance;//每次移动的距离 //每次移动的位移应为distance/duration,要移动的位置为element_top_y, function pageScroll() { var top = document.body.scrollTop;//获取滚动条顶部距离页面顶部的距离 var dis_top = top - element_top_y; window.scrollBy(0,-move_distance); scrolldelay=setTimeout('pageScroll()',50); if(dis_top<=0){ clearTimeout(scrolldelay); } // console.log(dis_top); } pageScroll(); }
一开始以为是作用域链的问题。
但如下相同结构的代码并没有执行错误
function a(){ console.log("a") function b() { console.log("b") } b() }
去论坛问了下。原来是执行调用setTimeout的原因
steTimeout函数机制就是用eval执行第一个参数'action()"字符串,既然action()字符串不存在,那么我把它换成了一个对象action进行测试,
原来setTimeout执行完成后,执行环境自动切换到window环境下,所以再次调用pageScroll()时才会出现函数未定义的错误。
解决方法是将
setTimeout('pageScroll()',50)
写成
setTimeout(pageScroll,50);
即把字符串写成对象。
好像setIntraval执行时是也会把环境切换到window对象下。
热心网友 时间:2022-04-23 15:58
你把show()函数改个名字,比如:_show()。可能是同引入的js文件总的某个函数冲突了。追问热心网友 时间:2022-04-23 17:16
确保ID是唯一的情况下,把这段函数代码搬到input dom元素后面(最好是</body>之前就行了)热心网友 时间:2022-04-23 18:51
亲。show()是jquery自带的函数!,你定义show()一定进不去啊。换一个名字就好了。