javascript - Js改变元素透明度函数,关于变量的作用域问题?

查看:94
本文介绍了javascript - Js改变元素透明度函数,关于变量的作用域问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

写了一个变换透明度的函数,但是作用域有问题,甚至很奇怪。。。
代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        #box{
            width: 800px;
            height: 800px;
            background-color: #1AE2F6;
        }
    </style>
</head>
<body>
    <div id="box"></div>
    <script>
        var box=document.getElementById("box");
        box.style.opacity=0.1;
        box.onmouseover=function(){
            changeopto(1);
        }
        box.onmouseout=function(){
            changeopto(0.1);
        }
        var timer=null;
        //var alpha=box.style.opacity;//在这里获取也不行
        var alpha=0.1;//只有定义一个值才能完成动画
        function changeopto(newOp){
        var box=document.getElementById("box");
        // alpha=box.style.opacity;//想得到box原来的opacity,不行
        clearInterval(timer);
        timer=setInterval(function(){
            var cgspeed=0;//每个时间单位变换的值
            if (newOp<alpha){
                 cgspeed=-0.01;
                 alpha+=cgspeed;
                 box.style.opacity=alpha;
            }
            if (newOp>alpha){
                 cgspeed=0.01;
                 alpha+=cgspeed;
                 box.style.opacity=alpha;                
            }
            if (newOp==alpha){
                clearInterval(timer);
            }

        },10);    
        }
    </script>
</body>
</html>

为什么在我这个函数里,只有在外部定义一个值才有效?而且在外部用box.style.opacity(和想赋的值相同)赋值都不行,只能用一个数值;在函数内部用 box.style.opacity 赋值也不应该没有效果啊??

解决方案

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        #box{
            width: 800px;
            height: 800px;
            background-color: #1AE2F6;
        }
    </style>
</head>
<body>
    <div id="box"></div>
    <script>
        var box = document.getElementById("box");
        box.style.opacity = 0.1;
        box.onmouseover = function() {
            changeopto(1);
        }
        box.onmouseout = function() {
            changeopto(0.1);
        }
        var timer = null;
        function changeopto(newOp) {
            clearInterval(timer);
            timer = setInterval( function() {
                var cgspeed = 0;//每个时间单位变换的值
                alpha = Number(box.style.opacity)
                console.log(box.style.opacity);
                if (newOp < alpha){
                     cgspeed = -0.01;
                     alpha += cgspeed;
                     box.style.opacity = alpha;
                }
                if (newOp > alpha){
                     cgspeed = 0.01;
                     alpha += cgspeed;
                     box.style.opacity = alpha;                
                }
                if (newOp == alpha){
                    clearInterval(timer);
                }
            } , 10 );    
        }
    </script>
</body>
</html>

这篇关于javascript - Js改变元素透明度函数,关于变量的作用域问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆