سؤال

أرغب في أن أكون قادرا على اكتشاف ما إذا كان الماوس لا يزال عبر العنصر في السيناريو التالي:

  1. إذا mouseover ثم النوم لبضع ثوان.
  2. بمجرد الانتهاء من النوم لفحص الماوس لا يزال على نفس العنصر.
  3. إذا كان هذا صحيحا ثم افعل شيئا.

كيف يمكنني تحقيق رقم 2؟

شكرًا لك.

هل كانت مفيدة؟

المحلول

نلقي نظرة على هادئ البرنامج المساعد ل jQuery. يمنحك معالج حدث جديد لن ينطلق إلا إذا كنت تحوم فوق عنصر لفترة معينة من الوقت. عن طريق تغيير خياراته، يجب أن تكون قادرا على الحصول عليها للقيام بالضبط ما تريد.

نصائح أخرى

يبدو أن هذا يعمل (http://jsbin.com/uvoqe.)

$("#hello").hover( function () {
  $(this).data('timeout', setTimeout( function () {

    alert('You have been hovering this element for 1000ms');

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

  clearTimeout($(this).data('timeout'));

});

ما عليك سوى استخدام العلم لإخبارك إذا كان الماوس فوقه.

var mouseover = false;
$('.thing').mouseenter(function(){
    mouseover = true;
}).mouseleave(function(){
    mouseover = false;
});

هنا طريقة واحدة:

عند ضبطك .يحوم() على العنصر، يمكنك تمرير وظائف 2 لها. أول واحد سوف يطلق النار عندما يكون الماوس فوق العنصر، الحرائق الثانية عندما يتحرك الماوس.

الوظيفة الأولى يمكن ضبط currentElementId (أو بعض العلم الآخر) والوظيفة الثانية ستؤذي ذلك. بهذه الطريقة الشيء الوحيد الذي تحتاج إلى القيام به هو التحقق مما إذا currentElementId فارغ.

يمكنك استخدام setTimeout( 'sleep', sleep_time ) لاستدعاء وظيفة بعد وقت محدد.

تعيين معالجات الأحداث إلى OnMouseover و OnMouseout.

هذه المعالجات تعديل العلم للتحقق مما إذا كان الماوس لا يزال على العنصر.

داخل وظيفة النوم، يمكنك التحقق من العلم، وعادته فقط.

لقد استخدمت ارتباط تشعبي لإظهار divثم على hover حدث قمت بتعيين خاصية مهلة هذا، وبمجرد أن أذهب إلى بلدي div أوضح المهلة والبدء في استخدام divhover وظيفة إلى fadeout div. وبعد آمل أن يكون هذا سيساعدك.

<script type="text/javascript">
    $(document).ready(function () {
        var obj;
        $("a").hover(function () {
            if ($("#div1").is(":hidden")) {
                $("#div1").fadeIn(300).show();
            }
        }, function () {
            obj = setTimeout("jQuery('#div1').fadeOut(300);", 300);
        });

        $("#div1").hover(function () {
            clearTimeout(obj);
            if ($("#div1").is(":hidden")) {

                $("#div1").show();
            }
        }, function () {
            jQuery('#div1').fadeOut(300);
        });
    });
</script>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top