ব্যবহারকারী এইচটিএমএল পৃষ্ঠা দেখতে পাচ্ছেন কিনা তা নির্ধারণ করার জন্য 3 টি সাধারণ পদ্ধতি ব্যবহার করা হয়, তবে এর মধ্যে কোনওটিই পুরোপুরি কার্যকরভাবে কাজ করে না:
W3C এর পাতা দৃশ্যমানতা এপিআই এই কাজ করতে অনুমিত হয় (সমর্থিত যেহেতু: ফায়ারফক্স 10, MSIE 10, ক্রোম 13)। যাইহোক, ব্রাউজার ট্যাবটি সম্পূর্ণরূপে ওভাররাইড হয়ে গেলে (যেমন ব্যবহারকারী যখন এক ট্যাব থেকে অন্য ট্যাবে পরিবর্তিত হয়) তখনই এই API টি ইভেন্টগুলি উত্থাপন করে। 100% নির্ভুলতার সাথে দর্শনশীলতা নির্ধারণ করা যায় না (যেমন অন্য কোনও অ্যাপ্লিকেশনে স্যুইচ করতে Alt + ট্যাব) যখন এপিআই ইভেন্টগুলি উত্থাপন করে না।
ব্যবহার ফোকাস / দাগ ভিত্তিক পদ্ধতি আপনি মিথ্যা ইতিবাচক অনেক দেয়। উদাহরণস্বরূপ, ব্যবহারকারী যদি ব্রাউজার উইন্ডোটির উপরে একটি ছোট উইন্ডো প্রদর্শন করে তবে ব্রাউজার উইন্ডোটি ফোকাসটি হারাবে ( onblur
উত্থাপিত) তবে ব্যবহারকারী এখনও এটি দেখতে সক্ষম (তাই এটি এখনও রিফ্রেশ করা দরকার)। Http://javascript.info/tutorial/fockes দেখুন
- ব্যবহারকারীর ক্রিয়াকলাপের উপর নির্ভর করা (মাউস মুভ, ক্লিকগুলি, কী টাইপ করা) আপনাকে অনেক মিথ্যা ইতিবাচক দেয়। উপরের মত একই কেস, বা কোনও ব্যবহারকারী কোনও ভিডিও দেখছেন about
উপরে বর্ণিত অসম্পূর্ণ আচরণগুলি উন্নত করতে, আমি 3 টি পদ্ধতির সংমিশ্রণ ব্যবহার করি: ডাব্লু 3 সি ভিজিবিলিটি এপি, তারপরে মিথ্যা ইতিবাচক হার হ্রাস করার জন্য ফোকাস / অস্পষ্টতা এবং ব্যবহারকারীর ক্রিয়াকলাপের পদ্ধতিগুলি। এটি নিম্নলিখিত ইভেন্টগুলি পরিচালনা করতে দেয়:
- অন্য একটিতে ব্রাউজার ট্যাব পরিবর্তন করা (100% নির্ভুলতা, ডাব্লু 3 সি পৃষ্ঠা ভিজিবিলিটি API এর জন্য ধন্যবাদ)
- পৃষ্ঠাটি অন্য উইন্ডো দ্বারা সম্ভাব্যভাবে লুকানো রয়েছে, যেমন আল্ট + ট্যাবের কারণে (সম্ভাব্যতা = 100% সঠিক নয়)
- ব্যবহারকারীর মনোযোগ সম্ভাব্যভাবে HTML পৃষ্ঠায় ফোকাস করা হয়নি (সম্ভাব্যতা = 100% সঠিক নয়)
এটি কীভাবে কাজ করে: ডকুমেন্টটি ফোকাসটি হারাতে থাকলে, উইন্ডোটি দৃশ্যমান কিনা তা নির্ধারণের জন্য নথিতে ব্যবহারকারীর ক্রিয়াকলাপ (যেমন মাউস মুভ) পর্যবেক্ষণ করা হয়। পৃষ্ঠাটির দৃশ্যমানতার সম্ভাবনাটি পৃষ্ঠায় শেষ ব্যবহারকারীর ক্রিয়াকলাপের সময়ের সাথে বিপরীতভাবে সমানুপাতিক: ব্যবহারকারী যদি দীর্ঘকাল ডকুমেন্টে কোনও ক্রিয়াকলাপ না করেন তবে পৃষ্ঠাটি সম্ভবত দৃশ্যমান নয়। নীচের কোডটি ডাব্লু 3 সি পৃষ্ঠা ভিজিবিলিটি API নকল করে: এটি একইভাবে আচরণ করে তবে এতে একটি ছোট মিথ্যা ইতিবাচক হার রয়েছে। এটি মাল্টিব্রোজার হওয়ার সুবিধা রয়েছে (ফায়ারফক্স 5, ফায়ারফক্স 10, এমএসআইই 9, এমএসআইই 7, সাফারি 5, ক্রোম 9 এ পরীক্ষিত)।
<div id = "x"> </div>
<স্ক্রিপ্ট>
/ **
প্রদত্ত বস্তুর জন্য ইভেন্টটিতে হ্যান্ডলারটিকে নিবন্ধভুক্ত করে।
@ পরিমাপ আপত্তিটি উত্থাপন করবে যা ইভেন্টটি উত্থাপন করবে
@ পরিসংখ্যান ইভেন্ট টাইপ করুন: ক্লিক করুন, কিপ্রেস, মাউসওভার, ...
ইভেন্ট হ্যান্ডলার ফাংশন
@ পরিমাপ ইভেন্ট ইভেন্ট মোড সেট করে (সত্য = ক্যাপচারিং ইভেন্ট, মিথ্যা = বুদবুদ ইভেন্ট)
ইভেন্ট হ্যান্ডলারটি সঠিকভাবে সংযুক্ত করা থাকলে @ সত্য পুনরায় করুন
* /
function
if (isCapturing == নাল) isCapturing = মিথ্যা;
যদি (obj.addEventListener) {
// ফায়ারফক্স
obj.addEventListener (evType, fn, isCapturing);
সত্য প্রত্যাবর্তন;
} অন্যথায় যদি (obj.attachEvent) {
// এমএসআইই
var r = obj.attachEvent ('on' + evType, fn);
প্রত্যাবর্তন r;
} অন্য {
প্রত্যাবর্তন মিথ্যা;
}
}
// সম্ভাব্য পৃষ্ঠার দৃশ্যমানতার পরিবর্তনে নিবন্ধন করুন
addEvent (দস্তাবেজ, "সম্ভাব্য সম্ভাবনা পরিবর্তন", ফাংশন (ইভেন্ট) {
document.getElementById ("x") inner
});
// ডাব্লু 3 সি পৃষ্ঠা ভিজিবিলিটি API এ নিবন্ধ করুন register
var লুকানো = নাল;
var দৃশ্যমানতা = নাল;
যদি (typof document.mozHID! == "অপরিজ্ঞাত") {
লুকানো = "mozHidden";
visibilityChange = "mozvisibilitychange";
} অন্যথায় যদি (typof document.msHID! == "অপরিজ্ঞাত") {
লুকানো = "msHidden";
visibilityChange "msvisibilitychange" =;
} অন্যথায় যদি (typof document.webkitHID! == "অপরিজ্ঞাত") {
লুকানো = "webkitHidden";
visibilityChange "webkitvisibilitychange" =;
} অন্যথায় যদি (দস্তাবেজ শৃঙ্খলাবদ্ধ! == "লুকানো") {
লুকানো = "লুকানো";
visibilityChange = "visibilitychange";
}
যদি (লুকানো! = নাল && দৃশ্যমানতার পরিবর্তন! = নাল) {
addEvent (দস্তাবেজ, দৃশ্যমানতার পরিবর্তন, ফাংশন (ইভেন্ট) {
document.getElementById ("x")। অভ্যন্তরীণ এইচটিএমএল + = দৃশ্যমানতা পরিবর্তন করুন "": "লুকানো +" = "+ নথি [লুকানো] +" <br> ";
});
}
var সম্ভাব্যপেজভিজিবিলিটি = {
পৃষ্ঠাভিজিবিলিটিচেনস্ট্রোল্ড: 3 * 3600, // সেকেন্ডে
init: ফাংশন () {
ফাংশন সেটআসনটহিডেন () {
var dispatchEventRequired = ডকুমেন্ট.পটেনশিয়ালহিডেন;
document.potentialHidden মিথ্যা =;
document.potentiallyHiddenSince = 0;
যদি (dispatchEventRequired) dispatchPageVisibilityChangeEvent ();
}
ফাংশন initPotentiallyHIDDEtection () {
যদি (! ফোকাস লোকাল) {
// উইন্ডোটিতে উইন্ডোতে ব্যবহারকারীর ক্রিয়াকলাপের জন্য ফোকাস => পরীক্ষা করা নেই
lastActionDate = নতুন তারিখ ();
যদি (টাইমআউটহ্যান্ডলার! = নাল) {
clearTimeout (timeoutHandler);
}
টাইমআউটহ্যান্ডলার = সেটটাইমআউট (চেকপেজভিজিবিলিটি, সম্ভাব্যপেজভিজিলিটি.পৃষ্ঠাভিজিবতাচেন্জহোল্ডার * 1000 + 100); ফায়ারফক্সের অধীনে গোলাকার সমস্যাগুলি এড়াতে // +100 এমএস
}
}
ফাংশন প্রেরণপেজভিজিবিলিটি চেঞ্জইভেন্ট () {
unifiedVisilityChangeEventDispatchAllowed মিথ্যা =;
var evt = document.createEvent ("ইভেন্ট");
evt.initEvent ("সম্ভাব্য সম্ভাবনা পরিবর্তন", সত্য, সত্য);
document.dispatchEvent (evt);
}
ফাংশন চেকপেজভিজিবিলিটি () {
var সম্ভাব্য হিডেনডোরেশন = (#FocLocal || গতঅ্যাকশনডেট == নাল? 0: ম্যাথ.ফ্লোর ((নতুন তারিখ ()। গেটটাইম () - গতঅ্যাকশনডেট.সেটটাইম ()) / 1000));
document.potentiallyHiddenSince = potentialHiddenDuration;
যদি (সম্ভাব্য হিডেনডিউরেশন> = সম্ভাব্যপেজভিজিবিলিটি.পৃষ্ঠাভিজিবতাচেন্জথ্রিশোল্ড && ডকুমেন্ট.পটেনশিয়ালহিডেন) {
// পৃষ্ঠার দৃশ্যমানতার পরিবর্তন থ্রেশহোল্ড রাইচড => সমান করুন
document.potentialHidden সত্য =;
dispatchPageVisibilityChangeEvent ();
}
}
var lastActionDate = নাল;
var hasFocusLocal = সত্য;
var hasMouseOver = সত্য;
document.potentialHidden মিথ্যা =;
document.potentiallyHiddenSince = 0;
var timeoutHandler = নাল;
addEvent (দস্তাবেজ, "পৃষ্ঠা প্রদর্শন", ফাংশন (ইভেন্ট) {
document.getElementById ( "এক্স") innerHTML + + = "pageshow / ডক: <br>"।
});
addEvent (দস্তাবেজ, "পেজহাইড", ফাংশন (ইভেন্ট) {
document.getElementById ( "এক্স") innerHTML + + = "pagehide / ডক: <br>"।
});
addEvent (উইন্ডো, "পৃষ্ঠা প্রদর্শন", ফাংশন (ইভেন্ট) {
document.getElementById ( "এক্স") innerHTML + + = "pageshow / win: <br>"। // উত্থাপিত যখন পৃষ্ঠা প্রথম দেখায়
});
addEvent (উইন্ডো, "পেজহাইড", ফাংশন (ইভেন্ট) {
document.getElementById ( "এক্স") innerHTML + + = "pagehide / win: <br>"। // উত্থাপিত হয় না
});
addEvent (দস্তাবেজ, "মাউসমেভ", ফাংশন (ইভেন্ট) {
lastActionDate = নতুন তারিখ ();
});
addEvent (দস্তাবেজ, "মাউসওভার", ফাংশন (ইভেন্ট) {
hasMouseOver সত্য =;
setAsNotHidden ();
});
addEvent (দস্তাবেজ, "মাউসআউট", ফাংশন (ইভেন্ট) {
hasMouseOver মিথ্যা =;
initPotentiallyHiddenDetection ();
});
addEvent (উইন্ডো, "অস্পষ্ট", ফাংশন (ইভেন্ট) {
hasFocusLocal মিথ্যা =;
initPotentiallyHiddenDetection ();
});
addEvent (উইন্ডো, "ফোকাস", ফাংশন (ইভেন্ট) {
hasFocusLocal সত্য =;
setAsNotHidden ();
});
setAsNotHidden ();
}
}
potentialPageVisibility.pageVisibilityChangeThreshold = 4; // পরীক্ষার জন্য 4 সেকেন্ড
potentialPageVisibility.init ();
</ স্ক্রিপ্ট>
যেহেতু বর্তমানে মিথ্যা পজিটিভ ছাড়াই কোনও কার্যকারী ক্রস ব্রাউজার সমাধান নেই, তাই আপনার নিজের ওয়েবসাইটে সাময়িক ক্রিয়াকলাপটি অক্ষম করার বিষয়ে আরও একবার দু'বার চিন্তা করা উচিত।
requestAnimationFrame
API টি দেখুন বা উইন্ডোটি দৃশ্যমান না হলেsetTimeout
/ এর ফ্রিকোয়েন্সিsetInterval
হ্রাস করা হয়েছে এমন আধুনিক বৈশিষ্ট্যটি ব্যবহার করুন (উদাহরণস্বরূপ ক্রোমে 1 সেকেন্ড)।