ইভেন্টটি সনাক্ত করুন যখন সিএসএসের সম্পত্তি জিকিউরি ব্যবহার করে পরিবর্তন হয়েছিল


91

কোনও উপাদানের "ডিসপ্লে" সিএসএস সম্পত্তি পরিবর্তিত হয়েছে কিনা তা সনাক্ত করার কোনও উপায় আছে (না কেউই বা ব্লক নয় বা ইনলাইন-ব্লক ...)? যদি না, কোন প্লাগইন? ধন্যবাদ

উত্তর:


93

বিঃদ্রঃ

মিউটেশন ইভেন্টগুলি পোস্টটি লেখা হওয়ার পর থেকে অবহেলা করা হয়েছে এবং সমস্ত ব্রাউজার দ্বারা এটি সমর্থিত হতে পারে না। পরিবর্তে, কোনও মিউটেশন পর্যবেক্ষক ব্যবহার করুন ।

হ্যা, তুমি পারো. ডোম এল 2 ইভেন্ট মডিউলটি মিউটেশন ইভেন্টগুলি সংজ্ঞায়িত করে ; এর মধ্যে একটি - ডোম্যাটট্রোমডিফাইড হ'ল আপনার যা প্রয়োজন। মঞ্জুর, এগুলি ব্যাপকভাবে প্রয়োগ করা হয় না, তবে কমপক্ষে গেকো এবং অপেরা ব্রাউজারগুলিতে সমর্থিত।

এই লাইন বরাবর কিছু চেষ্টা করুন:

document.documentElement.addEventListener('DOMAttrModified', function(e){
  if (e.attrName === 'style') {
    console.log('prevValue: ' + e.prevValue, 'newValue: ' + e.newValue);
  }
}, false);

document.documentElement.style.display = 'block';

আপনি প্রতিস্থাপন হিসাবে আইই এর "সম্পত্তি পরিবর্তন" ইভেন্টটি ব্যবহার করার চেষ্টা করতে পারেন DOMAttrModified। এটি styleনির্ভরযোগ্যভাবে পরিবর্তনগুলি সনাক্ত করার অনুমতি দেওয়া উচিত ।


ধন্যবাদ এটি ফায়ারফক্স সমর্থন করবে?
এইচপি

7
@ বোল্ডউইন: সত্য, তবে classউপাদানটির পূর্বপুরুষের বৈশিষ্ট্যটি (বা অন্য কোনও বৈশিষ্ট্য সিএসএসে উপস্থিত থাকলে অন্য কোনও বৈশিষ্ট্য পরিবর্তন করা ) উপাদানও পরিবর্তন করতে পারে, সুতরাং আপনাকে DOMAttrModifiedডকুমেন্টের মূল উপাদানটিতে সমস্ত ইভেন্ট পরিচালনা করতে হবে সবকিছু ধরা নিশ্চিত হন।
টিম ডাউন

12
এই ইভেন্টটি ডাব্লু 3 সি-এ অবচয় করা হয়েছে। এটি অন্য উপায় হতে হবে।
সিসাকাকুয়েব

8
এপিআইয়ের ডিজাইন ত্রুটিযুক্ত হওয়ায় পরিবর্তনের ঘটনাগুলি ডিওএম ইভেন্টস স্পেসিফিকেশনে অবচয় হিসাবে চিহ্নিত করা হয়েছে। মিউটেশন পর্যবেক্ষকরা প্রস্তাবিত প্রতিস্থাপন। লিংকটি এখানে [ বিকাশকারী.মোজিলা.আর.এন.ইউএস
ডকস / ডম / পরিবর্তন

4
আনমল - মিউটেশন ইভেন্টগুলির MDN লিঙ্কটি
হ'ল

19

আপনি অ্যাট্রিচেঞ্জ jQuery প্লাগইন ব্যবহার করতে পারেন । প্লাগইনটির প্রধান কাজ হ'ল এইচটিএমএল উপাদানগুলির বৈশিষ্ট্য পরিবর্তনে শ্রোতার ফাংশনকে আবদ্ধ করা।

কোড নমুনা:

$("#myDiv").attrchange({
    trackValues: true, // set to true so that the event object is updated with old & new values
    callback: function(evnt) {
        if(evnt.attributeName == "display") { // which attribute you want to watch for changes
            if(evnt.newValue.search(/inline/i) == -1) {

                // your code to execute goes here...
            }
        }
    }
});

মনে রাখবেন যে কিছু প্লাগইন যা সিএসএস ইভেন্টকে পরিবর্তিত করে att
jerrygarciuh

ভাল কাজ করে তবে এটি রেগেক্স অনুসন্ধান ব্যবহার করার চেয়ে দ্রুত এবং আপনার প্রথমটি দরকার নেই (evnt.attributeName ...): যদি (evnt.newValue.indexOf ('প্রদর্শন: ইনলাইন-ব্লক')> -1) {{{ ..; প্রত্যাবর্তন;}
ড্যান র্যান্ডলফ

4

cssসিএসএসের বৈশিষ্ট্যগুলি পরীক্ষা করতে আপনি jQuery এর ফাংশন ব্যবহার করতে পারেন eg if ($('node').css('display') == 'block')

কলিন ঠিকই বলেছেন, কোনও নির্দিষ্ট সিএসএসের সম্পত্তি পরিবর্তিত হয়ে গেলে বহিস্কারের কোনও স্পষ্ট ঘটনা নেই। তবে আপনি এটিকে চারপাশে ফ্লিপ করতে এবং ডিসপ্লে সেট করে এমন কোনও ইভেন্ট ট্রিগার করতে পারবেন এবং অন্য যে কোনও কিছু করতে পারেন।

আপনার পছন্দসই আচরণ পেতে সিএসএস ক্লাস যুক্ত করার বিষয়টি বিবেচনা করুন। প্রায়শই আপনি একটি উপাদান যুক্ত উপাদানটিতে একটি শ্রেণি যুক্ত করতে পারেন এবং সমস্ত উপাদানকে প্রভাবিত করতে সিএসএস ব্যবহার করতে পারেন। আমি প্রায়শই শরীরের উপাদানগুলির উপরে একটি শ্রেণি চাপড়ান যা একটি এজ্যাক্স প্রতিক্রিয়া মুলতুবি রয়েছে তা বোঝাতে। তারপরে আমি সিএসএস সিলেক্টরদের আমার যে প্রদর্শনটি পেতে চাই তা পেতে ব্যবহার করতে পারি।

আপনি যা সন্ধান করছেন এটি এটি কিনা নিশ্চিত না।


3

যে বৈশিষ্ট্যগুলির জন্য সিএসএস ট্রানজিশন প্রভাবিত করবে সেগুলির জন্য ট্রানজিশন ইভেন্ট ব্যবহার করতে পারে, উদাহরণস্বরূপ জেড-ইনডেক্স:

$(".observed-element").on("webkitTransitionEnd transitionend", function(e) {
  console.log("end", e);
  alert("z-index changed");
});

$(".changeButton").on("click", function() {
  console.log("click");
  document.querySelector(".observed-element").style.zIndex = (Math.random() * 1000) | 0;
});
.observed-element {
  transition: z-index 1ms;
  -webkit-transition: z-index 1ms;
}
div {
  width: 100px;
  height: 100px;
  border: 1px solid;
  position: absolute;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="changeButton">change z-index</button>
<div class="observed-element"></div>


-17

আপনি পারবেন না। সিএসএস "ইভেন্ট" সমর্থন করে না। সাহস আমি জিজ্ঞাসা করব আপনার কী দরকার? এখানে এই পোস্টটি দেখুন । আপনি কোনও ইভেন্টকে কোনও শৈলীর পরিবর্তনে কেন আঁকতে চান তার কোনও কারণ আমি ভাবতে পারি না। আমি এখানে ধরে নিচ্ছি যে শৈলীর পরিবর্তনটি জাভাস্ক্রিপ্টের টুকরো দিয়ে অন্য কোথাও শুরু হয়েছে। সেখানে অতিরিক্ত যুক্তি যুক্ত করবেন না কেন?


4
আমার বেশ কয়েকটি ইভেন্ট রয়েছে যা একটি বাক্স হাজির হওয়ার বা না পেতে ট্রিগার করতে পারে। এবং আমার কাছে আরও একটি উপাদান রয়েছে যে কিন্ডা জিনিসগুলি করতে সেই বাক্সটির উপস্থিতির উপর নির্ভর করে। এখন, আমি কোডটি পুনরাবৃত্তি করতে চাই না এবং বাক্সে উপস্থিত সমস্ত ইভেন্টগুলিতে হুক করতে চাই না যদিও এটি করার একটাই উপায়। শুধু অপ্রয়োজন!
এইচপি

এটি অনর্থক, সম্ভবত একটি নিয়ম ভিত্তিক সিস্টেম ব্যবহার করে কাজ করবে? অর্থাত্, কিছু জেএসওএন কাঠামোর মতো যা সংজ্ঞা দেয় যে যখন অন্য নিয়ন্ত্রণের পরিবর্তন ঘটে তখন কিছু নিয়ন্ত্রণের কী হওয়া উচিত? এইভাবে আপনাকে কেবল 1 টি ফাংশন তৈরি করতে হবে যা নিয়ম অবজেক্ট এবং প্যারামিটার হিসাবে সম্ভবত বর্তমান নিয়ন্ত্রণ (আইডি) ব্যবহার করে?
কলিন

4
কেন এই নিম্নমানের? উভয় উপাদানগুলির পিতামাতার জন্য শ্রেণি নির্ধারণ করা এবং এর উপর স্টাইল পরিবর্তন করা এর একমাত্র সঠিক সমাধান।
ইলিয়া জি

11
"আপনি কোনও স্টাইল পরিবর্তনের জন্য কেন ঘটনাটি ঘটাতে চান সে কারণের জন্য আমি ভাবতে পারি না" - আপনি যদি কোনও কারণ চিন্তা করতে না পারেন তবে এর কোনও সম্ভাব্য কারণ নেই এর অর্থ নেই এবং "কেন" সেখানে অতিরিক্ত যুক্তি যুক্ত করবেন না? " - কারণ আপনি সর্বদা স্ক্রিপ্টগুলি সংশোধন করতে পারবেন না।
Andrei Cojea

একটি উদাহরণ সরবরাহ করার জন্য, যখন পিতামাতার উপাদানটির রঙের সম্পত্তি পরিবর্তন হয় তখন আমি একটি এসভিজি পাথের পূরণের সম্পত্তিটি পরিবর্তন করতে চাই।
Andrei Cojea
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.