jQuery "กะพริบไฮไลต์" เอฟเฟกต์บน div?


88

ฉันกำลังมองหาวิธีดำเนินการต่อไปนี้

ฉันเพิ่ม<div>ไปยังเพจและ ajax callback ส่งคืนค่าบางอย่าง <div>เต็มไปด้วยค่าจากการเรียกอาแจ็กซ์และ<div>จะใช้ได้แล้วไปยังอีก<div>ซึ่งทำหน้าที่เป็นคอลัมน์ของตาราง

ฉันต้องการดึงดูดความสนใจของผู้ใช้เพื่อแสดงให้เธอ / เขาเห็นว่ามีอะไรใหม่ ๆ ในหน้านี้
ฉันต้องการ<div>ให้กะพริบไม่ใช่แสดง / ซ่อน แต่เพื่อไฮไลต์ / ยกเลิกไฮไลต์ในบางครั้งสมมติว่า 5 วินาที

ฉันดูที่ปลั๊กอินกะพริบ แต่เท่าที่ฉันเห็นมันแสดง / ซ่อนในองค์ประกอบเท่านั้น

Btw การแก้ปัญหาจะต้องข้ามเบราว์เซอร์และใช่ IE รวมอยู่ด้วย ฉันอาจจะต้องแฮ็คเล็กน้อยเพื่อให้มันทำงานใน IE แต่โดยรวมแล้วมันต้องใช้งานได้


4
กรุณาอย่า หากคุณต้องการเพียงแค่ไฮไลต์ด้วยเอฟเฟกต์ไฮไลต์ ( docs.jquery.com/UI/Effects/Highlight ) แต่อย่าให้มันกะพริบ
tvanfosson

1
@tv ฉันคิดว่า "กะพริบ" สั้น ๆ สองหรือสามครั้ง (โดยที่ "กะพริบ" หวังว่าจะมีอะไรบางอย่างที่ละเอียดอ่อนเช่นเส้นขอบที่เคลื่อนไหวได้หรืออะไรทำนองนั้น) ก็โอเคและไม่ระคายเคือง แต่แน่นอนว่าการกะพริบแบบเก่าเป็นเวลานาน เวลาจะแย่
Pointy

1
อิอิฉันรู้ว่าการกะพริบเป็นสิ่งที่น่ารำคาญ แต่จริงๆแล้วมันมีจุดประสงค์ที่นี่ ผู้ใช้ไม่คาดว่าจะนั่งอยู่ข้างจอมอนิเตอร์ทั้งวันดังนั้นเขาจึงต้องดูว่ามีอะไรเปลี่ยนไปจากระยะทางหรือไม่
ZolaKt

25
พวกคุณเป็นคนเฮฮา หน้าเว็บใช้สำหรับสิ่งที่พวกคุณคิดว่าถูกต้องเท่านั้น? ฉันไม่ต้องการไฮไลต์ฉันต้องกระพริบตาเพราะฉันกำลังเขียนหน้าการตรวจสอบกระบวนการเพื่อดูบนทีวีรูปแบบขนาดใหญ่และต้องกะพริบเป็นสีแดงและดำเนินการต่อเพื่อให้ผู้คนดึงดูดสายตา
Bmo

1
อาจซ้ำกันได้ของHow do you make an element "flash" ใน jQuery
cweiske

คำตอบ:


173

jQuery UI Highlight Effectคือสิ่งที่คุณกำลังมองหา

$("div").click(function () {
      $(this).effect("highlight", {}, 3000);
});

สามารถดูเอกสารและการสาธิตได้ที่นี่


แก้ไข :
บางทีjQuery UI Pulsate Effectจะเหมาะสมกว่าดูที่นี่


แก้ไข # 2 :
ในการปรับความทึบคุณสามารถทำได้:

$("div").click(function() {
  // do fading 3 times
  for(i=0;i<3;i++) {
    $(this).fadeTo('slow', 0.5).fadeTo('slow', 1.0);
  }
});

... ดังนั้นจะไม่ลดความทึบต่ำกว่า 50%


1
จังหวะคือสิ่งที่ฉันกำลังมองหา ขอบคุณมาก. เพียงแค่มีอยู่แล้วที่จะหยุดไม่ให้จางหายไปอย่างสมบูรณ์ เพียงเพื่อจางบอกความทึบ 50%? อาจจะเพียงเพื่อเชนเอฟเฟกต์ไฮไลต์สองสามครั้ง?
ZolaKt


30

นี่คือเอฟเฟกต์การกะพริบแบบกำหนดเองที่ฉันสร้างขึ้นซึ่งใช้ setIntervalและfadeTo

HTML -

<div id="box">Box</div>

JS -

setInterval(function(){blink()}, 1000);


    function blink() {
        $("#box").fadeTo(100, 0.1).fadeTo(200, 1.0);
    }

ง่ายอย่างที่คิด

http://jsfiddle.net/Ajey/25Wfn/


1
ใช้งานได้ดี! และไม่จำเป็นต้องใช้ JQuery UI
Pavel Vlasov

ทางออกที่ดี! ทำงานได้โดยไม่มีปัญหาใด ๆ โดยใช้ Jquery ขอบคุณ
เว็บไซต์ดิจิทัล

เป็นทางออกที่ดีที่สุดที่นี่!
DmitryBoyko

ทางออกที่ดีที่สุดที่นี่!
w3spi

19

หากคุณยังไม่ได้ใช้ไลบรารี Jquery UI และคุณต้องการเลียนแบบเอฟเฟกต์สิ่งที่คุณทำได้นั้นง่ายมาก

$('#blinkElement').fadeIn(100).fadeOut(100).fadeIn(100).fadeOut(100);

คุณยังสามารถเล่นกับตัวเลขเพื่อให้เร็วขึ้นหรือช้าลงเพื่อให้เหมาะกับการออกแบบของคุณได้ดีขึ้น

นอกจากนี้ยังสามารถเป็นฟังก์ชัน jquery ส่วนกลางเพื่อให้คุณสามารถใช้เอฟเฟกต์เดียวกันในเว็บไซต์ โปรดทราบว่าหากคุณใส่รหัสนี้ใน for loop คุณสามารถมีพัลส์ได้ 1 ล้านครั้งดังนั้นคุณจะไม่ถูก จำกัด ไว้ที่ 6 เริ่มต้นหรือค่าเริ่มต้นเท่าไหร่

แก้ไข: การเพิ่มสิ่งนี้เป็นฟังก์ชัน jQuery ส่วนกลาง

$.fn.Blink = function (interval = 100, iterate = 1) {
    for (i = 1; i <= iterate; i++)
        $(this).fadeOut(interval).fadeIn(interval);
}

กะพริบองค์ประกอบใด ๆ จากไซต์ของคุณได้อย่างง่ายดายโดยใช้สิ่งต่อไปนี้

$('#myElement').Blink(); // Will Blink once

$('#myElement').Blink(500); // Will Blink once, but slowly

$('#myElement').Blink(100, 50); // Will Blink 50 times once

18

สำหรับผู้ที่ไม่ต้องการรวม jQuery UI ทั้งหมดคุณสามารถใช้jQuery.pulse.jsแทนได้

หากต้องการมีภาพเคลื่อนไหวแบบวนซ้ำของการเปลี่ยนความทึบให้ทำสิ่งนี้:

$('#target').pulse({opacity: 0.8}, {duration : 100, pulses : 5});

มีน้ำหนักเบา (น้อยกว่า 1kb) และช่วยให้คุณเล่นภาพเคลื่อนไหวประเภทใดก็ได้


1
ยังคงต้องใช้ jQuery UI "Effects"
Jerome Jaglale

1
@JeromeJaglale ฉันใช้โดยไม่ใช้ jQuery UI เนื่องจากการเปลี่ยนความทึบสามารถทำได้ใน jQuery เพียงอย่างเดียว ควรจะเหมือนกันสำหรับคุณเว้นแต่คุณจะใช้ภาพเคลื่อนไหวเฉพาะ jQuery UI
lulalala

1
จุดดี. ฉันเข้าใจผิดโดยการสาธิตครั้งแรก (ข้อความกะพริบเป็นสีแดง) ซึ่งต้องใช้ jQuery UI Effects
Jerome Jaglale

เพียงแค่ทราบ คุณต้องรวมjquery.color.jsไว้สำหรับสิ่งที่เป็นสีเท่านั้น
Dave


6

เนื่องจากฉันไม่เห็นโซลูชันที่ใช้ jQuery ใด ๆ ที่ไม่ต้องใช้ไลบรารีเพิ่มเติมนี่เป็นวิธีง่ายๆที่มีความยืดหยุ่นมากกว่าที่ใช้ fadeIn / fadeOut เล็กน้อย

$.fn.blink = function (count) {
    var $this = $(this);

    count = count - 1 || 0;

    $this.animate({opacity: .25}, 100, function () {
        $this.animate({opacity: 1}, 100, function () {
            if (count > 0) {
                $this.blink(count);
            }
        });
    });
};

ใช้แบบนี้ครับ

$('#element').blink(3); // 3 Times.

1

ฉันใช้สีที่กำหนดไว้ล่วงหน้าที่แตกต่างกันดังนี้:

theme = {
    whateverFlashColor: '#ffffaa',
    whateverElseFlashColor: '#bbffaa',
    whateverElseThenFlashColor: '#ffffff',
};

และใช้แบบนี้

$('#element').effect("highlight", {color:theme.whateverFlashColor}, 1000);

ง่าย :)


0

หากคุณไม่ต้องการโอเวอร์เฮดของ jQuery UI ฉันเพิ่งเขียนโซลูชันแบบวนซ้ำโดยใช้.animate(). คุณสามารถปรับแต่งความล่าช้าและสีได้ตามที่คุณต้องการ

function doBlink(id, count) {
    $(id).animate({ backgroundColor: "#fee3ea" }, {
        duration: 100, 
        complete: function() {

            // reset
            $(id).delay(100).animate({ backgroundColor: "#ffffff" }, {
                duration: 100,
                complete: function() {

                    // maybe call next round
                    if(count > 1) {
                        doBlink(id, --count);
                    }
                }
            });

        }
    });
}

แน่นอนว่าคุณจะต้องมีปลั๊กอินสีเพื่อbackgroundColorใช้งาน.animate()ได้ https://github.com/jquery/jquery-color

และเพื่อให้บริบทเล็กน้อยนี่คือวิธีที่ฉันเรียกมัน ฉันต้องการเลื่อนหน้าไปยัง div เป้าหมายของฉันแล้วกระพริบตา

$(window).load(function(){
    $('html,body').animate({
        scrollTop: $(scrollToId).offset().top - 50
    }, {
        duration: 400,
        complete: function() { doBlink(scrollToId, 5); }
    });
});

0

ฉันคิดว่าคุณสามารถใช้คำตอบที่คล้ายกันที่ฉันให้ไว้ คุณสามารถค้นหาได้ที่นี่ ... https://stackoverflow.com/a/19083993/2063096

  • ควรทำงานบนเบราว์เซอร์ทั้งหมดเนื่องจากมีเพียง Javascript และ jQuery

หมายเหตุ: โซลูชันนี้ไม่ได้ใช้ jQuery UI นอกจากนี้ยังมีซอเพื่อให้คุณสามารถเล่นได้ตามต้องการก่อนที่จะนำไปใช้ในโค้ดของคุณ


0

เพียงแค่ให้ elem.fadeOut (10) .fadeIn (10);


FadeOut / FadeIn ซ่อน / แสดงองค์ประกอบในตอนท้ายซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหา ฉันต้องการเพิ่ม / ลดความทึบของสีโดยไม่ต้องซ่อนองค์ประกอบ
ZolaKt

ไม่, elem.show () ซ่อน () ทำอย่างนั้น FadeOut / FadeIn เปลี่ยน opactity คุณสามารถเล่นซอด้วยระยะเวลาของ fadeOut / fadeIn เพื่อให้ได้เอฟเฟกต์ที่ต้องการ มันซ่อนสิบเอ็ดครั้งแม้ว่า
ibsenv


0
<script>
$(document).ready(function(){
    var count = 0;
    do {
        $('#toFlash').fadeOut(500).fadeIn(500);
        count++;
    } while(count < 10);/*set how many time you want it to flash*/
});
</script

0

ลองดูสิ -

<input type="button" id="btnclick" value="click" />
var intervalA;
        var intervalB;

        $(document).ready(function () {

            $('#btnclick').click(function () {
                blinkFont();

                setTimeout(function () {
                    clearInterval(intervalA);
                    clearInterval(intervalB);
                }, 5000);
            });
        });

        function blinkFont() {
            document.getElementById("blink").style.color = "red"
            document.getElementById("blink").style.background = "black"
            intervalA = setTimeout("blinkFont()", 500);
        }

        function setblinkFont() {
            document.getElementById("blink").style.color = "black"
            document.getElementById("blink").style.background = "red"
            intervalB = setTimeout("blinkFont()", 500);
        }

    </script>

    <div id="blink" class="live-chat">
        <span>This is blinking text and background</span>
    </div>

0

ฉันไม่พบสิ่งที่ต้องการอย่างแท้จริงจึงเขียนบางอย่างที่เป็นพื้นฐานเท่าที่จะทำได้ ชั้นเรียนที่ไฮไลต์อาจเป็นเพียงสีพื้นหลัง

var blinking = false; // global scope

function start_blinking() {
    blinking = true;
    blink();
}

function stop_blinking() {
    blinking = false;
}

function blink(x=0) {
    $("#element").removeClass("highlighted"); // default to not highlighted to account for the extra iteration after stopping

    if (blinking) {
        if (x%2 == 0) $("#element").addClass("highlighted"); // highlight on even numbers of x
        setTimeout(function(){blink(++x)},500); // increment x and recurse
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.