জাভাস্ক্রিপ্টে " নিষ্কলুষ " সময়টি সনাক্ত করা কি সম্ভব ?
আমার প্রাথমিক ব্যবহারের ক্ষেত্রে সম্ভবত বিষয়বস্তু প্রি-আনতে বা প্রিললোড করা হবে।
অলস সময়: ব্যবহারকারীর নিষ্ক্রিয়তার সময় বা কোনও সিপিইউ ব্যবহার ছাড়াই
জাভাস্ক্রিপ্টে " নিষ্কলুষ " সময়টি সনাক্ত করা কি সম্ভব ?
আমার প্রাথমিক ব্যবহারের ক্ষেত্রে সম্ভবত বিষয়বস্তু প্রি-আনতে বা প্রিললোড করা হবে।
অলস সময়: ব্যবহারকারীর নিষ্ক্রিয়তার সময় বা কোনও সিপিইউ ব্যবহার ছাড়াই
উত্তর:
এখানে জিকুয়ারি ব্যবহার করে একটি সহজ স্ক্রিপ্ট যা মাউসমাভ এবং কী-টিপস ইভেন্টগুলি পরিচালনা করে। যদি সময় শেষ হয়, পৃষ্ঠাটি পুনরায় লোড করুন।
<script type="text/javascript">
var idleTime = 0;
$(document).ready(function () {
//Increment the idle time counter every minute.
var idleInterval = setInterval(timerIncrement, 60000); // 1 minute
//Zero the idle timer on mouse movement.
$(this).mousemove(function (e) {
idleTime = 0;
});
$(this).keypress(function (e) {
idleTime = 0;
});
});
function timerIncrement() {
idleTime = idleTime + 1;
if (idleTime > 19) { // 20 minutes
window.location.reload();
}
}
</script>
setIntervalযা জাভাস্ক্রিপ্ট হিসাবে মূল্যায়ন হয় gets
idleTime++;পরিবর্তে ব্যবহার করতে পারেনidleTime = idleTime + 1;
'mousemove keydown click'বিট ফ্ল্যাগ ( Event.MOUSEMOVE | Event.KEYDOWN | Event.CLICK) ব্যবহার করার মতো স্ট্রিংগুলির প্রতিটি ফাংশনও আপনি বদলে দিতে পারেন । তবে আপনি কি সত্যিই এটি করতে চান?
JQuery ব্যবহার না করে, কেবল ভ্যানিলা জাভাস্ক্রিপ্ট:
var inactivityTime = function () {
var time;
window.onload = resetTimer;
// DOM Events
document.onmousemove = resetTimer;
document.onkeypress = resetTimer;
function logout() {
alert("You are now logged out.")
//location.href = 'logout.html'
}
function resetTimer() {
clearTimeout(time);
time = setTimeout(logout, 3000)
// 1000 milliseconds = 1 second
}
};
এবং যেখানে আপনার এটি প্রয়োজন সেখানে ফাংশনটি শুরু করুন (উদাহরণস্বরূপ: অন পেজলড)।
window.onload = function() {
inactivityTime();
}
আপনার প্রয়োজনে আরও ডিওএম ইভেন্ট যুক্ত করতে পারেন। সর্বাধিক ব্যবহৃত হয়:
document.onload = resetTimer;
document.onmousemove = resetTimer;
document.onmousedown = resetTimer; // touchscreen presses
document.ontouchstart = resetTimer;
document.onclick = resetTimer; // touchpad clicks
document.onkeypress = resetTimer;
document.addEventListener('scroll', resetTimer, true); // improved; see comments
অথবা একটি অ্যারে ব্যবহার করে কাঙ্ক্ষিত ইভেন্টগুলি নিবন্ধ করুন
window.addEventListener('load', resetTimer, true);
var events = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart'];
events.forEach(function(name) {
document.addEventListener(name, resetTimer, true);
});
ডিওএম ইভেন্টের তালিকা: http://www.w3schools.com/jsref/dom_obj_event.asp
ব্যবহার মনে রাখবেন window, বা documentআপনার প্রয়োজন অনুসারে। এখানে আপনি তাদের মধ্যে পার্থক্যগুলি দেখতে পাবেন: জাভাস্ক্রিপ্টে উইন্ডো, পর্দা এবং নথির মধ্যে পার্থক্য কী?
@ ফ্র্যাঙ্ক-কনজিন এবং @ ডেক্সচেনের উন্নত কোডের সাথে কোড আপডেট হয়েছে : window.onscrollস্ক্রোলিং কোনও স্ক্রোলযোগ্য উপাদানটির মধ্যে থাকলে স্ক্রলিং হবে না কারণ স্ক্রোল ইভেন্টগুলি বুদবুদ নয়। window.addEventListener('scroll', resetTimer, true)তৃতীয় যুক্তি শ্রোতাদের বুদ্বুদ পর্যায়ের পরিবর্তে ক্যাপচার পর্বের সময় ইভেন্টটি ধরতে বলে।
document.onload = function () { inactivityTime(); }; document.onmousedown = function () { inactivityTime(); }; document.onkeypress = function () { inactivityTime(); }; document.ontouchstart = function () { inactivityTime(); };
ইক্যুইম্যানের উত্তরের উন্নতি:
function idleLogout() {
var t;
window.onload = resetTimer;
window.onmousemove = resetTimer;
window.onmousedown = resetTimer; // catches touchscreen presses as well
window.ontouchstart = resetTimer; // catches touchscreen swipes as well
window.onclick = resetTimer; // catches touchpad clicks as well
window.onkeypress = resetTimer;
window.addEventListener('scroll', resetTimer, true); // improved; see comments
function yourFunction() {
// your function for too long inactivity goes here
// e.g. window.location.href = 'logout.php';
}
function resetTimer() {
clearTimeout(t);
t = setTimeout(yourFunction, 10000); // time is in milliseconds
}
}
idleLogout();
।
এছাড়াও কার্যকলাপ সনাক্তকরণ সংক্রান্ত উন্নতি, এবং থেকে পরিবর্তন documentকরতে window, এই স্ক্রিপ্টের আসলে ফাংশন কল, বরং লেট তুলনায় এটি দ্বারা অলস বসতে।
এটি সরাসরি শূন্য সিপিইউ ব্যবহার করে না, তবে এটি অসম্ভব, কারণ কোনও ক্রিয়াকলাপ সম্পাদনের ফলে সিপিইউ ব্যবহারের কারণ হয়ে থাকে। এবং ব্যবহারকারীর নিষ্ক্রিয়তা শেষ পর্যন্ত শূন্য সিপিইউ ব্যবহারের দিকে পরিচালিত করে, তাই পরোক্ষভাবে এটি শূন্য সিপিইউ ব্যবহারকে ধরতে পারে।
window.onscrollস্ক্রোলিং যদি কোনও স্ক্রোলযোগ্য উপাদানটির মধ্যে থাকে তবে আগুন লাগবে না, কারণ স্ক্রোল ইভেন্টগুলি বুদ্বুদ হয় না। ব্যবহার করে window.addEventListener('scroll', resetTimer, true), তৃতীয় যুক্তি শ্রোতাদেরকে ফেজ (IE> 8) captureএর পরিবর্তে ফেজ চলাকালীন ইভেন্টটি ধরতে বলে bubble, এই উত্তরটি দেখুন
document.onscrollস্ক্রোলিং কোনও স্ক্রোলযোগ্য সন্তানের ভিতরে থাকলে একইভাবে সমস্যা হয় না, গুলি চালানো হয় না?
addEventListenerপরিবর্তে ব্যবহার করা onscroll।
আমি একটি ছোট lib তৈরি করেছি যা এক বছর আগে এটি করে:
https://github.com/shawnmclean/Idle.js
বর্ণনা:
ব্রাউজারে ব্যবহারকারীর ক্রিয়াকলাপের প্রতিবেদন করার জন্য ক্ষুদ্র জাভাস্ক্রিপ্ট লাইব্রেরি (দূরে, নিষ্ক্রিয়, ওয়েবপৃষ্ঠায় না দেখায়, অন্য কোনও ট্যাবে ইত্যাদি)। এটি jquery এর মতো অন্য কোনও জাভাস্ক্রিপ্ট লাইব্রেরির চেয়ে স্বাধীন।
ভিজ্যুয়াল স্টুডিওর ব্যবহারকারীরা এটি নুগেটের মাধ্যমে পেতে পারেন: PM> Install-Package Idle.js
টভানফসনের ধারণার একটি মোটামুটি jQuery বাস্তবায়ন এখানে:
$(document).ready(function(){
idleTime = 0;
//Increment the idle time counter every second.
var idleInterval = setInterval(timerIncrement, 1000);
function timerIncrement()
{
idleTime++;
if (idleTime > 2)
{
doPreload();
}
}
//Zero the idle timer on mouse movement.
$(this).mousemove(function(e){
idleTime = 0;
});
function doPreload()
{
//Preload images, etc.
}
})
setIntervalস্ট্রিং পাস ! ভেরিয়েবল হিসাবে কেবল একটি ফাংশন দিন!
setInterval()বিশ্বব্যাপী সুযোগে অভিব্যক্তিটি মূল্যায়নের জন্য একটি স্ট্রিং পাস করা এবং এটি timerIncrement().ডিডি হ্যান্ডলার ফাংশনের অভ্যন্তরে থাকা ফাংশনটি খুঁজে পাবে না । স্ট্রিংগুলিকে পাস করার জন্য এটি আর একটি কারণ setInterval()। কেবলমাত্র একটি আসল ফাংশন রেফারেন্স পাস করুন এবং আপনার এই সমস্যা হবে না কারণ সেগুলি বর্তমান স্কোপে মূল্যায়ন করা হয়।
উপরের আইকনিকের সমাধানের মতো (jQuery কাস্টম ইভেন্ট সহ) ...
// use jquery-idle-detect.js script below
$(window).on('idle:start', function(){
//start your prefetch etc here...
});
$(window).on('idle:stop', function(){
//stop your prefetch etc here...
});
//jquery-idle-detect.js
(function($,$w){
// expose configuration option
// idle is triggered when no events for 2 seconds
$.idleTimeout = 2000;
// currently in idle state
var idle = false;
// handle to idle timer for detection
var idleTimer = null;
//start idle timer and bind events on load (not dom-ready)
$w.on('load', function(){
startIdleTimer();
$w.on('focus resize mousemove keyup', startIdleTimer)
.on('blur',idleStart) //force idle when in a different tab/window
;
]);
function startIdleTimer() {
clearTimeout(idleTimer); //clear prior timer
if (idle) $w.trigger('idle:stop'); //if idle, send stop event
idle = false; //not idle
var timeout = ~~$.idleTimeout; // option to integer
if (timeout <= 100) timeout = 100; // min 100ms
if (timeout > 300000) timeout = 300000; // max 5 minutes
idleTimer = setTimeout(idleStart, timeout); //new timer
}
function idleStart() {
if (!idle) $w.trigger('idle:start');
idle = true;
}
}(window.jQuery, window.jQuery(window)))
আপনি এটিকে আন্ডারস্কোর এবং jquery দিয়ে আরও মার্জিতভাবে করতে পারেন -
$('body').on("click mousemove keyup", _.debounce(function(){
// do preload here
}, 1200000)) // 20 minutes debounce
আমার উত্তর বিজয়ের উত্তর দ্বারা অনুপ্রাণিত হয়েছিল , তবে এটি একটি সংক্ষিপ্ত, আরও সাধারণ সমাধান যা আমি ভেবেছিলাম যে এটি কারও পক্ষে সহায়তা করতে পারে তার জন্য আমি ভাগ করে নিই।
(function () {
var minutes = true; // change to false if you'd rather use seconds
var interval = minutes ? 60000 : 1000;
var IDLE_TIMEOUT = 3; // 3 minutes in this example
var idleCounter = 0;
document.onmousemove = document.onkeypress = function () {
idleCounter = 0;
};
window.setInterval(function () {
if (++idleCounter >= IDLE_TIMEOUT) {
window.location.reload(); // or whatever you want to do
}
}, interval);
}());
এটি বর্তমানে যেমন দাঁড়িয়ে আছে, এই কোডটি তত্ক্ষণাত্ কার্যকর করা হবে এবং 3 মিনিটের পরে কোনও মাউস চালনা বা কী চাপ না দেওয়ার পরে আপনার বর্তমান পৃষ্ঠাটি পুনরায় লোড করবে।
এটি পরিষ্কার এবং স্বনির্ভর উপায়ে নিষ্ক্রিয় সময়সীমা হ্যান্ডেল করতে সাদামাটা ভ্যানিলা জাভাস্ক্রিপ্ট এবং তাত্ক্ষণিকভাবে অনুরোধ করা ফাংশন এক্সপ্রেশন ব্যবহার করে।
onclickঅ্যাসাইনমেন্টটি সরিয়েছি কারণ এটি সম্ভবত এটি ছাড়াও প্রয়োজনীয় নয় onmousemove, তবে স্পষ্টতই প্রোগ্রামযুক্তভাবে উদ্দীপ্ত হওয়া এই ইভেন্টগুলির কোনওটি পুনরায় সেট করা অব্যাহত রাখবে idleCounter। আমি নিশ্চিত না আপনি কেন কেবল কোনও ফাংশন কল করার পরিবর্তে ব্যবহারকারীর মিথস্ক্রিয়াকে সিমুলেট করবেন, তবে যদি কিছু কারণে আপনার কিছু করা প্রয়োজন হয় তবে অবশ্যই এই উত্তরটি আপনার পক্ষে কার্যকর হবে না এবং অন্যান্য উত্তরগুলির বেশিরভাগই আমিও করব না ' এই প্রশ্নের দিকে তাকিয়েছি।
আমি এটি একটি তুলনামূলকভাবে পুরানো প্রশ্ন জানি, কিন্তু আমার একই সমস্যা ছিল এবং আমি একটি বেশ ভাল সমাধান খুঁজে পেয়েছি।
আমি ব্যবহার করেছি: jquery.idle এবং আমার কেবল এটি করা দরকার:
$(document).idle({
onIdle: function(){
alert('You did nothing for 5 seconds');
},
idle: 5000
})
জেএসফিডাল ডেমো দেখুন ।
(কেবলমাত্র তথ্যের জন্য: ব্যাক-এন্ড ইভেন্ট ট্র্যাকিংয়ের জন্য এটি দেখুন ব্রাউজার লোড )
keepTrackingবিকল্পটি সেট করতে পারেন false। আপনার পুনরায় সেট করতে চাইলে আপনি পুনরায় পুনর্নির্মাণের চেষ্টা করতে পারেন। এখানে একটি পরিবর্তিত উদাহরণ রয়েছে যা কেবল একবারে গুলি চালানো হবে: jsfiddle.net/f238hchm/12
পূর্ববর্তী সমস্ত উত্তরের একটি সদা-সক্রিয় মাউসমেভ হ্যান্ডলার রয়েছে। যদি হ্যান্ডলারটি jQuery হয় তবে অতিরিক্ত প্রক্রিয়াকরণ jQuery সম্পাদন করতে পারে can বিশেষত যদি ব্যবহারকারী গেমিং মাউস ব্যবহার করে থাকে তবে প্রতি সেকেন্ডে 500 টির মতো ইভেন্ট ঘটতে পারে।
এই সমাধানটি প্রতিটি মাউসমেভ ইভেন্ট পরিচালনা করা এড়িয়ে চলে। এটি একটি ছোট সময়সীমার ত্রুটির ফলস্বরূপ, তবে যা আপনি আপনার প্রয়োজনের সাথে সামঞ্জস্য করতে পারেন।
function setIdleTimeout(millis, onIdle, onUnidle) {
var timeout = 0;
startTimer();
function startTimer() {
timeout = setTimeout(onExpires, millis);
document.addEventListener("mousemove", onActivity);
document.addEventListener("keydown", onActivity);
}
function onExpires() {
timeout = 0;
onIdle();
}
function onActivity() {
if (timeout) clearTimeout(timeout);
else onUnidle();
//since the mouse is moving, we turn off our event hooks for 1 second
document.removeEventListener("mousemove", onActivity);
document.removeEventListener("keydown", onActivity);
setTimeout(startTimer, 1000);
}
}
$(startTimer)সমান $(document).ready(startTimer), এটি নিশ্চিত করে যে আপনি মাউসমোভ এবং কী-টিপস ইভেন্টগুলি হুক করার আগে DOM প্রস্তুত।
আপনি সম্ভবত ফর্মের শরীরে মাউস চলাচল সনাক্ত করে এবং শেষ চলমান সময়ের সাথে একটি বৈশ্বিক পরিবর্তনশীল আপডেট করে একসাথে কিছু হ্যাক করতে পারেন। তারপরে আপনার একটি বিরতি টাইমার চালিত হওয়া দরকার যা পর্যায়ক্রমে শেষ চলমান সময়টি পরীক্ষা করে দেখায় এবং মাউসের শেষ চলন সনাক্তকরণের পরে যথেষ্ট সময় হয়ে থাকলে এটি কিছু করা উচিত।
নিষ্ক্রিয় সময়সীমার ক্রিয়াকলাপ এবং অন্যথায় ইভেন্টগুলিতে আগুন লাগানোর জন্য আমি একটি ছোট ES6 ক্লাস লিখেছিলাম। এটি জুড়ে কীবোর্ড, মাউস এবং স্পর্শ , যাবে সক্রিয় করা হয়েছে এবং নিষ্ক্রিয় এবং একটি খুব রোগা এপিআই আছে:
const timer = new IdleTimer(() => alert('idle for 1 minute'), 1000 * 60 * 1);
timer.activate();
এটি jQuery এর উপর নির্ভর করে না , যদিও আপনাকে পুরানো ব্রাউজারগুলি সমর্থন করার জন্য বাবেলের মাধ্যমে এটি চালানোর প্রয়োজন হতে পারে।
https://gist.github.com/4547ef5718fd2d31e5cdcafef0208096
আমি কিছু প্রতিক্রিয়া পেয়ে আমি এটি এনপিএম প্যাকেজ হিসাবে প্রকাশ করতে পারি।
আপনি যদি কোনও সমর্থিত ব্রাউজার (ডিসেম্বর 2018 এর হিসাবে ক্রোম বা ফায়ারফক্স) টার্গেট করে থাকেন তবে আপনি অনুরোধআইডেলক্যালব্যাক নিয়ে পরীক্ষা করতে পারেন এবং অসমর্থিত ব্রাউজারগুলির জন্য অনুরোধআইডেলক্যালব্যাক শিম অন্তর্ভুক্ত করতে পারেন ।
এই কোডটি ব্যবহার করে দেখুন, এটি নিখুঁতভাবে কাজ করে।
var IDLE_TIMEOUT = 10; //seconds
var _idleSecondsCounter = 0;
document.onclick = function () {
_idleSecondsCounter = 0;
};
document.onmousemove = function () {
_idleSecondsCounter = 0;
};
document.onkeypress = function () {
_idleSecondsCounter = 0;
};
window.setInterval(CheckIdleTime, 1000);
function CheckIdleTime() {
_idleSecondsCounter++;
var oPanel = document.getElementById("SecondsUntilExpire");
if (oPanel)
oPanel.innerHTML = (IDLE_TIMEOUT - _idleSecondsCounter) + "";
if (_idleSecondsCounter >= IDLE_TIMEOUT) {
alert("Time expired!");
document.location.href = "SessionExpired.aspx";
}
}
<script type="text/javascript">
var idleTime = 0;
$(document).ready(function () {
//Increment the idle time counter every minute.
idleInterval = setInterval(timerIncrement, 60000); // 1 minute
//Zero the idle timer on mouse movement.
$('body').mousemove(function (e) {
//alert("mouse moved" + idleTime);
idleTime = 0;
});
$('body').keypress(function (e) {
//alert("keypressed" + idleTime);
idleTime = 0;
});
$('body').click(function() {
//alert("mouse moved" + idleTime);
idleTime = 0;
});
});
function timerIncrement() {
idleTime = idleTime + 1;
if (idleTime > 10) { // 10 minutes
window.location.assign("http://www.google.com");
}
}
</script>
আমি মনে করি এই jquery কোডটি নিখুঁত, যদিও উপরের উত্তরগুলি থেকে অনুলিপি করা হয়েছে এবং সংশোধন করা হয়েছে !! ডোনট আপনার ফাইলটিতে jquery লাইব্রেরি অন্তর্ভুক্ত করতে ভুলে গেছেন!
এই সমস্ত সমাধানগুলির সাথে সমস্যাটি যদিও সঠিক, তবুও তারা অযৌক্তিক, যখন পিএইচপি, .NET ব্যবহার করে বা কোল্ডফিউশন বিকাশকারীদের জন্য অ্যাপ্লিকেশন.সিফসি ফাইলটিতে সেশন সময়সীমা মূল্যবান সেটকে বিবেচনা করে। উপরের সমাধানটির দ্বারা নির্ধারিত সময়টির জন্য সার্ভার সাইড সেশন সময়সীমার সাথে সিঙ্ক করা দরকার। যদি দুটি সিঙ্ক না হয় তবে আপনি এমন সমস্যায় পড়তে পারেন যা আপনার ব্যবহারকারীদের হতাশ করবে এবং বিভ্রান্ত করবে। উদাহরণস্বরূপ, সার্ভার সাইড সেশনের সময়সীমাটি 60 মিনিটের মধ্যে সেট করা যেতে পারে তবে ব্যবহারকারীরা বিশ্বাস করতে পারে যে সে নিরাপদ, কারণ জাভাস্ক্রিপ্ট নিষ্ক্রিয় সময় ক্যাপচারের ফলে কোনও একক পৃষ্ঠায় ব্যবহারকারী মোট সময় ব্যয় করতে পারে। ব্যবহারকারীর একটি দীর্ঘ ফর্ম পূরণে সময় ব্যয় হতে পারে, এবং তারপরে এটি জমা দিতে যায়। ফর্ম জমা দেওয়ার প্রক্রিয়া করার আগে সেশনটির সময়সীমা শেষ হতে পারে। আমি কেবল আমার ব্যবহারকারীদের 180 মিনিট সময় দেই, এবং তারপরে ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে লগ আউট করতে জাভাস্ক্রিপ্ট ব্যবহার করুন। মূলত, একটি সাধারণ টাইমার তৈরি করতে উপরের কোডগুলি ব্যবহার করে, তবে মাউস ইভেন্ট অংশটি ক্যাপচার না করে। এইভাবে আমার ক্লায়েন্ট পক্ষ এবং সার্ভার পার্শ্ব সময় পুরোপুরি সিঙ্ক করে। এতে কোনও বিভ্রান্তি নেই, আপনি যদি আপনার ইউআই-তে ব্যবহারকারীকে সময় দেখান, এটি হ্রাস পায়। প্রতিবার সিএমএসে একটি নতুন পৃষ্ঠা অ্যাক্সেস করা হলে সার্ভার সাইড সেশন এবং জাভাস্ক্রিপ্ট টাইমার পুনরায় সেট করা হয়। সহজ এবং মার্জিত। যদি কোনও ব্যবহারকারী কোনও একক পৃষ্ঠায় 180 মিনিটেরও বেশি সময় ধরে থাকেন তবে আমি অনুভব করি যে পৃষ্ঠায় কিছু ভুল আছে, এটি হ্রাস হিসাবে। প্রতিবার সিএমএসে একটি নতুন পৃষ্ঠা অ্যাক্সেস করা হলে সার্ভার সাইড সেশন এবং জাভাস্ক্রিপ্ট টাইমার পুনরায় সেট করা হয়। সহজ এবং মার্জিত। যদি কোনও ব্যবহারকারী কোনও একক পৃষ্ঠায় 180 মিনিটেরও বেশি সময় ধরে থাকেন তবে আমি অনুভব করি যে পৃষ্ঠায় কিছু ভুল আছে, এটি হ্রাস হিসাবে। প্রতিবার সিএমএসে একটি নতুন পৃষ্ঠা অ্যাক্সেস করা হলে সার্ভার সাইড সেশন এবং জাভাস্ক্রিপ্ট টাইমার পুনরায় সেট করা হয়। সহজ এবং মার্জিত। যদি কোনও ব্যবহারকারী কোনও একক পৃষ্ঠায় 180 মিনিটেরও বেশি সময় ধরে থাকেন তবে আমি অনুভব করি যে পৃষ্ঠায় কিছু ভুল আছে,
যথাযথ সেট রিসেট সময় এবং মাধ্যমে বাইন্ডিং সহ বিশুদ্ধ জাভাস্ক্রিপ্ট addEventListener
(function() {
var t,
timeout = 5000;
function resetTimer() {
console.log("reset: " + new Date().toLocaleString());
if (t) {
window.clearTimeout(t);
}
t = window.setTimeout(logout, timeout);
}
function logout() {
console.log("done: " + new Date().toLocaleString());
}
resetTimer();
//And bind the events to call `resetTimer()`
["click", "mousemove", "keypress"].forEach(function(name) {
console.log(name);
document.addEventListener(name, resetTimer);
});
}());
(এই থ্রেডের আগে ইক্যুইম্যানের ভাল মূল যুক্তি দ্বারা আংশিকভাবে অনুপ্রাণিত।)
সেশনএক্সপায়ার.জেএস হালকা ওজনের হলেও কার্যকর এবং কাস্টমাইজযোগ্য। একবার প্রয়োগ করা হলে, কেবল একটি সারিতে ব্যবহার করুন:
sessionExpiration(idleMinutes, warningMinutes, logoutUrl);
আপনি যদি সিএসএস পরিবর্তন না করেন তবে এটি কার্যত দেখতে কেমন লাগে তার একটি উদাহরণ এটি।
আমি একটি সাধারণ jQuery প্লাগইন লিখেছি যা আপনি যা খুঁজছেন তা করবে।
https://github.com/afklondon/jquery.inactivity
$(document).inactivity( {
interval: 1000, // the timeout until the inactivity event fire [default: 3000]
mouse: true, // listen for mouse inactivity [default: true]
keyboard: false, // listen for keyboard inactivity [default: true]
touch: false, // listen for touch inactivity [default: true]
customEvents: "customEventName", // listen for custom events [default: ""]
triggerAll: true, // if set to false only the first "activity" event will be fired [default: false]
});
স্ক্রিপ্টটি মাউস, কীবোর্ড, স্পর্শ এবং অন্যান্য কাস্টম ইভেন্টগুলি নিষ্ক্রিয়তা (নিষ্ক্রিয়) এবং আগুনের বৈশ্বিক "ক্রিয়াকলাপ" এবং "নিষ্ক্রিয়তা" ইভেন্টগুলির জন্য শুনবে।
আশাকরি এটা সাহায্য করবে :)
এক্সপ্লোর করার জন্য মাত্র কয়েকটি চিন্তা, একটি এভিনিউ বা দুটি two
প্রতি 10 সেকেন্ডে কোনও ফাংশন চালানো কি সম্ভব এবং "কাউন্টারের" পরিবর্তনশীল পরীক্ষা করা যায়? যদি এটি সম্ভব হয় তবে আপনি পৃষ্ঠাটির জন্য একটি মাউসওভার রাখতে পারেন, তাই না? যদি তা হয় তবে "কাউন্টার" ভেরিয়েবলটি পুনরায় সেট করতে মাউসওভার ইভেন্টটি ব্যবহার করুন। যদি আপনার ফাংশনটি ডাকা হয় এবং কাউন্টারটি আপনি পূর্ব নির্ধারিত সীমার উপরে থাকেন তবে আপনার ক্রিয়াটি করুন।
আবার, কিছু চিন্তা ... আশা করি এটি সাহায্য করবে।
আমি এই কোড ওয়ার্কিং ফাইলটি পরীক্ষা করেছি:
var timeout = null;
var timee = '4000'; // default time for session time out.
$(document).bind('click keyup mousemove', function(event) {
if (timeout !== null) {
clearTimeout(timeout);
}
timeout = setTimeout(function() {
timeout = null;
console.log('Document Idle since '+timee+' ms');
alert("idle window");
}, timee);
});
এখানে সবচেয়ে ভালো সমাধান আমি খুঁজে পেয়েছি হল: http://css-tricks.com/snippets/jquery/fire-event-when-user-is-idle/
এখানে জেএস:
idleTimer = null;
idleState = false;
idleWait = 2000;
(function ($) {
$(document).ready(function () {
$('*').bind('mousemove keydown scroll', function () {
clearTimeout(idleTimer);
if (idleState == true) {
// Reactivated event
$("body").append("<p>Welcome Back.</p>");
}
idleState = false;
idleTimer = setTimeout(function () {
// Idle Event
$("body").append("<p>You've been idle for " + idleWait/1000 + " seconds.</p>");
idleState = true; }, idleWait);
});
$("body").trigger("mousemove");
});
}) (jQuery)
আপনি নীচের উল্লিখিত সমাধানটি ব্যবহার করতে পারেন
var idleTime;
$(document).ready(function () {
reloadPage();
$('html').bind('mousemove click mouseup mousedown keydown keypress keyup submit change mouseenter scroll resize dblclick', function () {
clearTimeout(idleTime);
reloadPage();
});
});
function reloadPage() {
clearTimeout(idleTime);
idleTime = setTimeout(function () {
location.reload();
}, 3000);
}
আমি এই পদ্ধতির ব্যবহার করি, যেহেতু কোনও ইভেন্টে আগুন লাগার সময় আপনাকে নিয়মিতভাবে পুনরায় সেট করার দরকার নেই, পরিবর্তে আমরা কেবল সময়টি রেকর্ড করি, এটি নিষ্ক্রিয় সূচনা পয়েন্টটি উত্পন্ন করে।
function idle(WAIT_FOR_MINS, cb_isIdle) {
var self = this,
idle,
ms = (WAIT_FOR_MINS || 1) * 60000,
lastDigest = new Date(),
watch;
//document.onmousemove = digest;
document.onkeypress = digest;
document.onclick = digest;
function digest() {
lastDigest = new Date();
}
// 1000 milisec = 1 sec
watch = setInterval(function(){
if (new Date() - lastDigest > ms && cb_isIdel) {
clearInterval(watch);
cb_isIdle();
}
}, 1000*60);
},
তালিকাবদ্ধ মাউসমেভ ট্রিকস ব্যবহার করে আপনি সম্ভবত আপনার ওয়েব পৃষ্ঠায় নিষ্ক্রিয়তা সনাক্ত করতে পারেন তবে এটি আপনাকে বলবে না যে ব্যবহারকারী অন্য উইন্ডো বা ট্যাবে অন্য পৃষ্ঠায় নেই, বা ব্যবহারকারী ওয়ার্ড বা ফটোশপ, বা WOW এবং ঠিক এখন আপনার পৃষ্ঠার দিকে তাকিয়ে নেই। সাধারণত আমি কেবল প্রিফেচ করতাম এবং ক্লায়েন্টের মাল্টি-টাস্কিংয়ের উপর নির্ভর করতাম। আপনার যদি সত্যই এই কার্যকারিতাটির প্রয়োজন হয় তবে আপনি উইন্ডোতে অ্যাক্টিভেক্স নিয়ন্ত্রণ দিয়ে কিছু করেন তবে এটি সর্বোত্তম।
এখানে কৌণিক কার্য সম্পাদনের জন্য একটি AngularJS পরিষেবা রয়েছে।
/* Tracks now long a user has been idle. secondsIdle can be polled
at any time to know how long user has been idle. */
fuelServices.factory('idleChecker',['$interval', function($interval){
var self = {
secondsIdle: 0,
init: function(){
$(document).mousemove(function (e) {
self.secondsIdle = 0;
});
$(document).keypress(function (e) {
self.secondsIdle = 0;
});
$interval(function(){
self.secondsIdle += 1;
}, 1000)
}
}
return self;
}]);
মনে রাখবেন এই নিষ্ক্রিয় চেকারটি সমস্ত রুটের জন্য চলবে, তাই এটি .run()কৌনিক অ্যাপ্লিকেশনের লোডে শুরু করা উচিত । তারপরে আপনি idleChecker.secondsIdleপ্রতিটি রুটের অভ্যন্তরে ব্যবহার করতে পারবেন ।
myApp.run(['idleChecker',function(idleChecker){
idleChecker.init();
}]);
আত্মপ্রকাশ আসলে একটি দুর্দান্ত ধারণা! এখানে jQuery ফ্রি প্রকল্পগুলির জন্য সংস্করণ:
const derivedLogout = createDerivedLogout(30);
derivedLogout(); // it could happen that user too idle)
window.addEventListener('click', derivedLogout, false);
window.addEventListener('mousemove', derivedLogout, false);
window.addEventListener('keyup', derivedLogout, false);
function createDerivedLogout (sessionTimeoutInMinutes) {
return _.debounce( () => {
window.location = this.logoutUrl;
}, sessionTimeoutInMinutes * 60 * 1000 )
}
এটি যতটা সহজ পাবে, মাউস কেবল তখন চলবে তা সনাক্ত করুন:
var idle = false;
document.querySelector('body').addEventListener('mousemove', function(e) {
if(idle!=false)idle = false;
});
var idleI = setInterval(function()
{
if(idle == 'inactive')
{
return;
}
if(idle == true)
{
idleFunction();
idle = 'inactive';
return;
}
idle = true;
}, 30000);// half the expected time, idle will trigger after 60s in this case.
function idleFuntion()
{
console.log('user is idle');
}
ভাল আপনি একটি ক্লিক বা মাউসমেভ ইভেন্টটি ডকুমেন্টের বডিতে সংযুক্ত করতে পারেন যা টাইমার পুনরায় সেট করে। টাইমার ব্যবধানে আপনি এমন একটি ফাংশন রেখেছেন যা টাইমার নির্দিষ্ট সময় (1000 মিলিসের মতো) বেশি সময় শেষ করে কিনা তা পরীক্ষা করে আপনার প্রিলোডিং শুরু করে।
জাভাস্ক্রিপ্টের সিপিইউ ব্যবহার বলার উপায় নেই। এটি ভিতরে স্যান্ডবক্স জাভাস্ক্রিপ্ট রান ভাঙ্গতে হবে।
এগুলি ছাড়া, পৃষ্ঠার অনমাউসওভার এবং অনকিডাউন ইভেন্টগুলি হুক করা সম্ভবত কাজ করবে।
আপনি কোনও বিলম্বের পরে ডাকা একটি ফাংশন নির্ধারণের জন্য অনলোড ইভেন্টে সেটটাইমআউট ব্যবহার করতে পারেন।
// Call aFunction after 1 second
window.setTimeout(aFunction, 1000);