javascript 單個圖片的淡入淡出效果和多張圖片的淡入淡出效果


最近剛好在看之前妙趣網站的javascript 初級運動教程,教程里說設置圖片的透明度使用了一個變量。這種方法確實不錯,但是燕姐喜歡麻煩。就用自己的理解方法寫了一遍。其中也是各種坑。現在先把一個圖片的淡入淡出效果代碼放出來。

一張圖片的淡入淡出##

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    .img01{
        width: 400px;
        height: 400px;
        opacity: 0.3;
        filter: alpha(opacity=30);
    }
  </style>
</head>
<body>
<img class="img01" id="img01" src="1.jpg" alt="">
<script>
/**
 * 使用js勻速運動實現圖片的淡入淡出效果
 * 這里沒有使用變量而是用了一個更麻煩的方法。其中遇到種種的問題
 * 出錯問題點:
 * 1、首先使用getStyle獲得行內樣式的opacity,注意點這個獲得的alpha值其實是一個字符串類型,要轉為數值型
 * 2、特別要注意在將值付給opactiy就要這里有一個小數精確的問題: 例如0.1+0.2不等於0.3,解決這個問題可以分別先*10,在除以10
 * 3、timer 原先被我定義在startMove中。當快速移入的時候就會出現閃屏的問題。需要把timer移到外面來。
 */
window.onload = function () {
    var oImg = document.getElementById('img01');
    var alpha = Number(getStyle(oImg,"opacity"));

    oImg.onmouseover = function () {
        startMove(1);
    };

    oImg.onmouseout = function () {
        startMove(0.3);
    };
    
    var timer = null;
   
    function startMove (iTarget) {
        var oImg = document.getElementById('img01');
        clearInterval(timer);
        timer = setInterval(function(){
            var speed = 0;
            if( alpha < iTarget ) {
                speed = 0.1;
            }else{
                speed = -0.1;
            }

            if(alpha === iTarget){
                clearInterval(timer);
            }else{
                alpha = (alpha*10 + speed*10)/10;
                oImg.style.opacity = alpha;
                oImg.style.filter = "alpha(opacity="+ alpha*100 +")";
            }
        },30);
    }

    function getStyle (obj, attr) {
        if(window.getComputedStyle){
            return window.getComputedStyle(obj,null)[attr];
        }else{
            return obj.currentStyle[attr];
        }
    }
 };

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

在做多張圖片的淡入淡出的時候也是遇到各種問題。話說我是問題君嗎?哭! 后來實在找不出問題的在哪里,就到 segementfalut上問問題,好心人幫助回答了問題。現在把大神的代碼放出來,其中有一篇他自己寫的相關文章還不錯,推薦給大家
http://www.cnblogs.com/silin6/p/4333999.html

多個圖片淡入淡出##

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    *{
        margin: 0;
        padding: 0;
    }

    ul,li{
        list-style: none;
    }

    .imglist {
        width: 1000px;
        height: 400px;
    }
    .imglist ul {
        width: 1000px;
        overflow: hidden;
    }
    .imglist ul li.item {
        width: 200px;
        height: 400px;

        float: left;

        opacity: 0.3;
        filter: alpha(opacity=30);
    }

    .imglist ul li.item img {
        width: 200px;
        height: 400px;

        float: left;
    }
  </style>
</head>
<body>
<div class="imglist">
    <ul id="imglist">
        <li class="item i1"><img src="1.jpg" alt=""></li>
        <li class="item i2"><img src="1.jpg" alt=""></li>
        <li class="item i3"><img src="1.jpg" alt=""></li>
        <li class="item i4"><img src="1.jpg" alt=""></li>
        <li class="item i5"><img src="1.jpg" alt=""></li>
    </ul>
</div>
<script>

window.onload = function () {
   var oImg = document.getElementById('imglist');
   var oImgLi = oImg.getElementsByTagName('li');
//ES5的func
Array.prototype.forEach.call(oImgLi, function (img) {//傳遞回調函數,構建新的作用域
    //timer、alpha和startMove,不應該被每個li共享使用,因為每個li都有自己的狀態,自己的動畫狀態(自己的動畫時長,alpha透明度)
    var timer = null,
        alpha = 0.3;
    function startMove(obj, iTarget) {
        clearInterval(timer);
        timer = setInterval(function () {
            var speed = 0;
            if (alpha < iTarget) {
                speed = 0.1;
            } else {
                speed = -0.1;
            }

            if (alpha === iTarget) {
                clearInterval(timer);
            } else {
                alpha = (alpha * 10 + speed * 10) / 10;
                obj.style.opacity = alpha;
                obj.style.filter = "alpha(opacity=" + alpha * 100 + ")";
            }
        }, 30);
    }
    img.onmouseover = function () {
        startMove(this, 1);

    };

    img.onmouseout = function () {
        startMove(this, 0.3);
    };
});

 };

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM