לאחרונה יצא לי להתוודע אל יעילות css3 מול קוד הjs.

    כחלק מפרויקט בעבודה היינו צריכים ליצור כפתור שיתריע במקרים מסוימים , מה שעשינו היה  div מסוים לו הוחלף הצבע רקע, מה שגרם להבהוב על המסך.

    הצורה שבה זה נעשה , היתה תוך שימוש ב-javaScript .

    הפעלנו פונקציה בלולאה אינסופית שמופעלת כל  400ms ,שתפקידה היה להחליף classes. וכל class הכיל צבע רקע שונה (אחד לבן , אחד אדום ) 

    מה שגרם להבהוב על המסך , אך גם גרם לצריכת CPU מרובה.

    לפני פתרון הבעיה , נציג את הקוד:

    Code Snippet
    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <meta charset=”utf-8″ />

        <link rel=”stylesheet” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css” integrity=”sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7″ crossorigin=”anonymous”>
        <link rel=”stylesheet” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css” integrity=”sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r” crossorigin=”anonymous”>
        <script src=”https://code.jquery.com/jquery-2.2.0.min.js”></script>

        <script src=”site.js”></script>
        <style>
            .statusLight {
                width: 25px;
                height: 25px;
                border-radius: 35px;
                display: inline-block;
                border-width: 3px;
                border-style: solid;
                border-color: black;
            }

            .securityStatusLight {
                background-color: red;
            }

            .notActivStatusLight {
                background-color: white;
            }

            .a {
                margin-left: 30px;
            }
        </style>
    </head>
    <body>
        <h1 class=”a”>js</h1>
        <ul>
            <li class=”statusLight” style=”border-color:#36984D”></li>
            <li class=”statusLight” style=”border-color:#FF9900″></li>
            <li class=”statusLight securityStatusLight” style=”border-color:#FF0000″ id=”securityProblem”></li>
        </ul>
    </body>
    </html>

    ההבהוב עובד רק על ה <li> האחרון בעל id=securityProblem.

    וכן קוד ה js:

    Code Snippet
    $(function () {
        interval = setInterval(function () {
            if ($(‘#securityProblem’).hasClass(“notActivStatusLight”)) {
                $(‘#securityProblem’).removeClass(“notActivStatusLight”).addClass(“securityStatusLight”);
            }
            else if ($(‘#securityProblem’).hasClass(“securityStatusLight”)) {
                $(‘#securityProblem’).removeClass(“securityStatusLight”).addClass(“notActivStatusLight”);
            }
        }, 400);
    });

    מה שאנחנו רואים כאן זה פונקציה אחת שמפעילה את קוד החלפת הclasses  כל 400ms בעזרת setInterval.

    הפתרון לבעית השימוש בCPU היה להשתמש בcss3 animation מה שגרם לאותה תוצאה בלי שימוש מרובה ב CPU

    והנה לפניכם הקוד :

    Code Snippet
    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <meta charset=”utf-8″ />

        <link rel=”stylesheet” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css” integrity=”sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7″ crossorigin=”anonymous”>
        <link rel=”stylesheet” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css” integrity=”sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r” crossorigin=”anonymous”>
        <script src=”https://code.jquery.com/jquery-2.2.0.min.js”></script>

        <style>
            .statusLight {
                width: 25px;
                height: 25px;
                border-radius: 35px;
                display: inline-block;
                border-width: 3px;
                border-style: solid;
                border-color: black;
            }

            .securityStatusLight {
                background-color: red;
                -webkit-animation: demo-1 500ms infinite;
            }

            @keyframes demo-1 {

                to {
                    background-color: white;
                }
            }
           .a{
               margin-left:30px;
           }
        </style>
    </head>
    <body>
        <h1 class=”a”>css3</h1>
        <ul>
            <li class=”statusLight” style=”border-color:#36984D”></li>
            <li class=”statusLight” style=”border-color:#FF9900″></li>
            <li class=”statusLight securityStatusLight” style=”border-color:#FF0000″ id=”securityProblem”></li>
        </ul>
    </body>
    </html>

    מה שעשינו כאן הוא יצרנו אנימציה  בcss ע”י כתיבת  keyframes שמקבל את שם האנימציה (demo-1) ואמרנו לו מה יעשה ב to  ומתוך הstyle של הclass הרצוי( במקרה זה securityStatusLight ) קראנו לאנימציה

    וזה מה שנוצר

    1 2

    שימו לב שאין שימוש כלל בקוד js,מה שמפעיל את האנימציה הוא הcss.

     

    ניתן להוריד כאן את הקוד המלא סמיילי