javascript - JS做放大缩小的效果时,JS为什么在HEAD中没效果?
巴扎黑
巴扎黑 2017-04-11 13:19:08
[JavaScript讨论组]

先上代码: //我运行的时候会取消掉注释的




    
    08work
  


    鸣人  
    
    
    


百度过后说是浏览器的加载顺序,然后尝试了
window.onload = function(){}
$(document).ready(function){}
结果没什么用..
只有在将js放在body后才有用(主要是 img 后面,在button前面没关系)。

问:到底怎么做才可以让它在head中有效果... window.onload这个为什么会没效果(因为大家都说加这个就可以了)

巴扎黑
巴扎黑

全部回复(4)
PHP中文网

作用域的问题,另外说一句你这写法很有问题

PHP中文网

注意通过属性绑定事件的问题:

  • window.onload 是事件在页面元素渲染完毕后的回调

  • zoomInzoomOut 是在 window.onload 中定义的函数

  • 在渲染 button 时同时定义了 onclick 属性,这时 zoomInzoomOut 还没有定义,导致调用报错,按钮失效。

  • 按你的需求,解决方案是在 window.onload 之前定义 zoomInzoomOut。也就是将其放在 window.onload 外面。

ringa_lee

这是因为浏览器加载html页面,是从上到下一行一行加载渲染的。在load的时候,js在前面,outInPic这个id元素还没有,所以放head里时imgElement是为null的

<script>
    var imgElement = null;//全局
    window.onload = function(){
        imgElement = document.getElementById("outInPic");
        //console.log(imgElement);
        imgElement.width=500;
    }
    function zoomIn(){
        imgElement.width-=100;
    }
    function zoomOut(){
        imgElement.width+=100;
    }
    </script>

把zoomIn和zoomOut两个函数放window.onload函数外,imgElement变量定义成全局

伊谢尔伦

你把 zoomIn()zoomOut() 定义在 window.onload() 里面的话,他们是局部函数,全局访问不到,包括 button 元素的 onclick 事件处理器属性也无法访问。如果要把它放在 head 里面的话一个可能可以的办法是

window.onload = function(){
    var imgElement = document.getElementById("outInPic");
    imgElement.width = 500;
    window.zoomIn = function zoomIn() {
        imgElement.width -= 100;
    };
    window.zoomOut = function zoomOut() {
        imgElement.width += 100;
    };
};
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号