내 div의 CSS 스타일을 블록에서 없음으로 변경하면 발생하는 순수 자바 스크립트 이벤트 (jQuery 없음)가 있습니다. 나는 "onBlur"를 통해 그것을 잡을 수는 있지만 인상 할 수없는 것처럼 보인다.CSS 스타일의 자바 스크립트 이벤트가 블록에서 없음으로 변경
알려 주시기 바랍니다.
내 div의 CSS 스타일을 블록에서 없음으로 변경하면 발생하는 순수 자바 스크립트 이벤트 (jQuery 없음)가 있습니다. 나는 "onBlur"를 통해 그것을 잡을 수는 있지만 인상 할 수없는 것처럼 보인다.CSS 스타일의 자바 스크립트 이벤트가 블록에서 없음으로 변경
알려 주시기 바랍니다.
가시성 변경에 대해 트리거 된 DOM 이벤트가 없습니다.
할 수있는 최선의 방법은 항상 동일한 기능을 사용하여 매번 스타일을 변경하는 대신 블록의 가시성을 조정하는 것입니다.
올드 패턴 :
function doSomething() {
alert("I'm doing something!");
myBlock.style.display = "block";
}
function doSomethingElse() {
alert("I'm doing something else now!");
myBlock.style.display = "none";
}
새로운 패턴 :
function doSomething() {
alert("I'm doing something!");
toggleMyBlock(true);
}
function doSomethingElse() {
alert("I'm doing something else now!");
toggleMyBlock(false);
}
function toggleMyBlock(show) {
if (show) {
// code here for what would be your 'it became visible' event.
} else {
// code here for what would be your 'it became invisible' event.
}
myBlock.style.display = show ? "block" : "none";
}
+1 질문에 답하고, dom 이벤트가 발생하지 않으며, javascript를 구조화하는 더 나은 방법을 지적했습니다. jquery에서하지 않는 것에 대해서 ... – Ryan
:
그가 오래된 브라우저 * IE *를 지원해야하는 경우? – Ryan
MSIE 인수가 이미 사망하게하십시오. ChromeFrame은 훌륭하게 작동하며 플래시보다 불편 함이 적습니다. MSIE 10은 실제로 css3을 포함하여 최소한의 "html5"(나쁜 전문 용어 사용 경고)를 지원합니다. https://developer.mozilla.org/en-US/docs/CSS/Tutorials/Using_CSS_transitions MSIE를 지원하기를 원하기 때문에 무언가를 할 수 없다는 말은 이층입니다. MSIE를 통해도 작업을 완료 할 수 있습니다. – CoolAJ86
끔찍한 생각으로 미안합니다. 개발자가 아닌 제 사무실의 모든 사람들을 포함하여 많은 사람들이 직장에서 IE를 사용해야하며 관리자 권한에 액세스 할 수 없으며 chromeframe을 설치할 수 없습니다. 또한 OP는 javascript 답변을 요청했고 매우 좋은 답변이 제공되었습니다. 마지막으로 아무도 MSIE 때문에 무언가를 할 수 없다고 말했습니다. op가 원하는 것만 할 수 있습니다 * 당신의 대답이 제안한 방식이 아닙니다. – Ryan
나는 당신이 찾고있는 것과 가장 가까운 것이 DOMAttrModified
event 일 것이라고 생각합니다. 나는 그것을 사용의에 완전히 확실하지 않다, 그러나의 라인을 따라입니다 :
element.addEventListener('DOMAttrModified', function (e) {
...
});
이벤트 핸들러가 display
이 block
또는 none
로 설정되어 있는지 여부를 확인하기 위해 당신에게 충분한 정보를 제공해야 MutationEvent
받습니다.
내가 질문을 오해했을 수
편집 할 수 있습니다. CSS 변경으로 인해 DOMAttrModified
이벤트가 발생한다고 생각하지 않습니다. 처음에는 JavaScript로 display
에 CSS 값을 설정한다는 의미의 질문을 읽었습니다. 내 대답이 도움이되지 않을 수도 있습니다.
향후 새로운 "교차점 옵저버 API"가 여러분이 찾고있는 것입니다. 현재 최신 Chrome, Firefox 및 Edge에서 작동합니다. 자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API을 참조하십시오. 디스플레이를 관찰
간단한 코드 예 : 유료 전환 :
// Start observing visbility of element. On change, the
// the callback is called with Boolean visibility as
// argument:
respondToVisibility(element, callback) {
var options = {
root: document.documentElement
}
var observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
callback(entry.intersectionRatio > 0);
});
}, options);
observer.observe(element);
}
respondToVisibility(myElement, isVisible => {
if (isVisible) {
doSomething();
}
});
의'소자 – Ryan
그 차이 어려운 방법 yeah..learned 포커스를 잃을 때위한 onblur'. 내 경우에 사용할 수있는 다른 표준 이벤트가 있습니까? – curioussam
자바 스크립트로'div'를 바꿨습니까? – Ryan