تحتاج إلى رمز جافا سكريبت للضغط مع الاستمرار على الزر

StackOverflow https://stackoverflow.com/questions/79816

  •  09-06-2019
  •  | 
  •  

سؤال

أرغب في أصغر روتين جافا سكريبت ممكن، والذي عند حدوث نقرة بالماوس على زر، فإنه يستجيب أولاً تمامًا مثل النقر بالماوس، ثم إذا استمر المستخدم في الضغط على الزر فإنه يستجيب كما لو كان المستخدم يرسل نقرات بالماوس بشكل مستمر وبعد فترة من الوقت مع يعمل الزر الذي تم الضغط عليه باستمرار كما لو كان المستخدم يقوم بتسريع نقرات الماوس... فكر في الأمر بشكل أساسي مثل تكرار الضغط على المفتاح مع التسارع في الوقت المناسب.
أي.يضغط المستخدم باستمرار على زر الماوس (x=وظيفة الاتصال) - x____x___x___x__x__x_x_x_x_xxxxxxxxx

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

المحلول

function holdit(btn, action, start, speedup) {
    var t;

    var repeat = function () {
        action();
        t = setTimeout(repeat, start);
        start = start / speedup;
    }

    btn.mousedown = function() {
        repeat();
    }

    btn.mouseup = function () {
        clearTimeout(t);
    }
};

/* to use */
holdit(btn, function () { }, 1000, 2); /* x..1000ms..x..500ms..x..250ms..x */

نصائح أخرى

عند الضغط على الزر، اتصل window.setTimeout مع الوقت المقصود والوظيفة x, ، واضبط المؤقت مرة أخرى عند نهاية x ولكن هذه المرة بفاصل زمني أصغر.

مسح المهلة باستخدام window.clearTimeout عند تحرير زر الفأرة.

ما عليك سوى وضع زر التبديل أدناه في OnMouseDown وتبديل Off في OnMouseUp للزر.

var tid = 0;
var speed = 100;

function toggleOn(){
    if(tid==0){
        tid=setInterval('ThingToDo()',speed);
    }
}
function toggleOff(){
    if(tid!=0){
        clearInterval(tid);
        tid=0;
    }
}
function ThingToDo{

}

قد يعمل شيء مثل الكود psuedo أدناه ..

var isClicked = false;
var clickCounter = 100;
function fnTrackClick(){
   if(isClicked){
      clickCounter--;
      setTimeout(clickCounter * 100, fnTrackClick);
   }
}

<input type="button" value="blah" onmousedown="isClicked=true;" onmouseover="fnTrackClick();" onmouseup="isClicked = false;" />

لقد قمت للتو بإصدار مكون إضافي لـ jQuery، تحقق من ذلك تجريبي على هذا الريبو.

$('button').clickAndHold(function (e, n) {
    console.log("Call me baby ", n);
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top