开发者社区> 问答> 正文

JS关于setInterval给opacity值,代码出了点问题

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
    <title></title>
<style>
.bgcolor{background: #ccc;}
.bgcolor1{background: red;}
div1 #text .text1{width: 730px;height: 80px;fiter:alpha(opacity=100);opacity: 1;display: block;}
div1 #text .text2{width: 730px;height: 80px;fiter:alpha(opacity=100);opacity: 0;display: none;}
div1 #text .text3{width: 730px;height: 80px;fiter:alpha(opacity=100);opacity: 0;display: none;}
div1 #btn a{width: 16px;height: 16px;border-radius: 50px;display:inline-block;margin-left: 10px;}
div1 #btn li{list-style: none;float: left;}
</style>

</head>
<body>
<div id="div1">
    <div id="text" class="">
            <p class="text1">111111111<br/>1111111111111111111111111111<br/>
                    1111111111111111111111111111111</p>
            <p class="text2">222222222222222222222<br/>2222222222222222222222222<br/>222222222222</p>
            <p class="text3">3333333333<br/>333333333333333333333333333</p>
    </div>
    <div id="btn" class="">
        <ul>
            <li><a href="javascript:;" class="bgcolor1"></a></li>
            <li><a href="javascript:;" class="bgcolor"></a></li>
            <li><a href="javascript:;" class="bgcolor"></a></li>
        </ul>
    </div>


</div>

<script>
window.onload=function(){

        var oDiv=document.getElementById('div1');
        var oTxt=oDiv.getElementsByTagName('p');

        var oBtn=document.getElementsByTagName('a');

        var alpha=0;
        var timer=null;
        for(var i=0;i<oBtn.length;i++){
            oBtn[i].index=i;
            oBtn[i].onclick=function(){
                for(var i=0;i<oBtn.length;i++){
                    oBtn[i].className='bgcolor';
                    oTxt[i].style.display='none';
                }

                this.className='bgcolor1';
                //otxt[this.index].style.display='block';
                
                oTxt[this.index].style.display='block';
                startMove()



            }
        }


        function startMove(){
                var oDiv=document.getElementById('div1');
                var oTxt=oDiv.getElementsByTagName('p');
                clearInterval(timer);
                timer=setInterval(function(){
                    if(alpha==100){
                        clearInterval(timer);
                    }
                    else{
                        alpha=alpha+10;

                        oTxt[this.index].style.opacity=alpha/10;
                    }
                },30);

        }
    }
</script>
</body>
</html>

screenshot
screenshot

展开
收起
杨冬芳 2016-06-07 20:03:23 2230 0
1 条回答
写回答
取消 提交回答
  • IT从业

    原因就是this的指向问题,但是我这么更改后你就不会报错了,this的指向的具体情况,百度一下会有很多答案(只有4种情况),你的这个原因就是this指向了全局对象window,而不是你所点击的那个按钮。另外如果你是想要淡入淡出效果的话,你的startMove代码还是有一些问题的。对你代码做了以下的更改,但是更改后代码不兼容低版本ie的兼容。

        // 切换按钮处更改
        oBtn[i].onclick=function(){
            for(var i=0;i<oBtn.length;i++){
                oBtn[i].className='bgcolor';
                oTxt[i].style.display='none';
                oTxt[i].style.opacity = 0;
            }
            this.className='bgcolor1'; 
            oTxt[this.index].style.display='block';
            startMove(this);
        }
        //  startMove函数更改
        function startMove(_this){
            var oDiv=document.getElementById('div1');
            var oTxt=oDiv.getElementsByTagName('p');
            clearInterval(timer);
            timer = setInterval(function(){
                var alpha = +oTxt[_this.index].style.opacity;
                if (alpha === 1) {
                    clearInterval(timer);
                }
                else{
                    alpha += 0.1;
                    oTxt[_this.index].style.opacity = alpha;
                }
            },30);
        }
    2019-07-17 19:30:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载