mouseoverChrome 에서 시뮬레이션 할 코드를 찾으려고 했지만 "mouseover"리스너가 실행 되더라도 CSS "hover"선언이 설정되지 않았습니다!
나는 또한 시도했다 :
//Called within mouseover listener
theElement.classList.add("hover");
그러나 요소를 선언에 선언 된 것으로 변경하는 것은 없습니다 hover.
이것이 가능한가?
mouseoverChrome 에서 시뮬레이션 할 코드를 찾으려고 했지만 "mouseover"리스너가 실행 되더라도 CSS "hover"선언이 설정되지 않았습니다!
나는 또한 시도했다 :
//Called within mouseover listener
theElement.classList.add("hover");
그러나 요소를 선언에 선언 된 것으로 변경하는 것은 없습니다 hover.
이것이 가능한가?
답변:
당신은 할 수 없습니다. 신뢰할 수있는 이벤트 가 아닙니다 .
사용자 상호 작용의 결과 또는 DOM 변경의 직접적인 결과로 사용자 에이전트에 의해 생성 된 이벤트는 DocumentEvent.createEvent를 통해 스크립트에 의해 생성 된 이벤트에 부여되지 않는 권한을 가진 사용자 에이전트에 의해 신뢰됩니다. ( "Event") 메서드, Event.initEvent () 메서드를 사용하여 수정하거나 EventTarget.dispatchEvent () 메서드를 통해 전달합니다. 신뢰할 수있는 이벤트의 isTrusted 속성 값은 true이고 신뢰할 수없는 이벤트의 isTrusted 속성 값은 false입니다.
대부분의 신뢰할 수없는 이벤트는 click 또는 DOMActivate 이벤트를 제외하고 기본 작업을 트리거하지 않아야합니다.
클래스를 추가하고 mouseover / mouseout 이벤트에서 수동으로 추가 / 제거해야합니다.
다음과 같이 mouseover 이벤트를 시뮬레이션 할 수 있습니다.
HTML
<div id="name">My Name</div>
자바 스크립트
var element = document.getElementById('name');
element.addEventListener('mouseover', function() {
console.log('Event triggered');
});
var event = new MouseEvent('mouseover', {
'view': window,
'bubbles': true,
'cancelable': true
});
element.dispatchEvent(event);
temp0.dispatchEvent(new MouseEvent('mouseover', {bubbles: true})) 마우스 오버시에만 나타나는 도구 설명이나 기타 콘텐츠의 스타일을 지정하는 데 매우 유용합니다.
:hov에 대해서는 devtools의 스타일 검사기 상단에있는 버튼을 확인해야합니다 . 검사중인 요소에서 원하는 가상 클래스를 활성화 할 수 있습니다.
나는 주어진 페이지의 특정 요소 세트가 호버 이벤트에 대한 CSS에 의해 설정된 일부 CSS 속성 세트를 가지고 있는지 확인하기 위해 자동화 된 테스트를 작성하려고 시도하는 동안이 질문을 발견했습니다.
위의 답변이 완벽하게 설명하지만 JS에 의해 hover 이벤트를 트리거 한 다음 관심있는 일부 css 값을 조사하는 것이 불가능한 이유는 "CSS를 활성화하는 순수 JavaScript에서 마우스 오버를 어떻게 시뮬레이션합니까?"라는 초기 질문에 대답합니다. : hover”? " 부분적으로 만.
이것은 성능이 뛰어난 솔루션이 아닙니다. 성능이 문제가되지 않는 자동화 된 테스트에만 사용합니다.
simulateCssEvent = function(type){
var id = 'simulatedStyle';
var generateEvent = function(selector){
var style = "";
for (var i in document.styleSheets) {
var rules = document.styleSheets[i].cssRules;
for (var r in rules) {
if(rules[r].cssText && rules[r].selectorText){
if(rules[r].selectorText.indexOf(selector) > -1){
var regex = new RegExp(selector,"g")
var text = rules[r].cssText.replace(regex,"");
style += text+"\n";
}
}
}
}
$("head").append("<style id="+id+">"+style+"</style>");
};
var stopEvent = function(){
$("#"+id).remove();
};
switch(type) {
case "hover":
return generateEvent(":hover");
case "stop":
return stopEvent();
}
}
generateEvent는 모든 css 파일을 읽고 : hover를 빈 문자열로 바꾸고 적용합니다. 모든 : hover 스타일이 적용되는 효과가 있습니다. 이제 시뮬레이션을 중지하여 Howered 스타일을 조사하고 초기 상태로 돌아갈 수 있습니다.
시트에서를 가져 와서 element.css (...)를 수행하여 관심있는 요소뿐만 아니라 전체 문서에 대해 호버 효과를 적용하는 이유는 무엇입니까?
이렇게하면 스타일이 인라인으로 적용되고 원래 CSS 호버 스타일에 의해 재정의되지 않을 수있는 다른 스타일이 재정의됩니다.
이제 단일 요소에 대한 호버링을 어떻게 시뮬레이션합니까?
이것은 성능이 좋지 않으므로하지 않는 것이 좋습니다. 필요한 경우 스타일이 요소에 적용되고 해당 스타일 만 사용하는지 element.is (selectorOfInterest)로 확인할 수 있습니다.
Jasmine에서 다음을 수행 할 수 있습니다.
describe("Simulate CSS Event", function() {
it("Simulate Link Hover", function () {
expect($("a").css("text-decoration")).toBe("none");
simulateCssEvent('hover');
expect($("a").css("text-decoration")).toBe("underline");
simulateCssEvent('stop');
expect($("a").css("text-decoration")).toBe("none");
});
});
내가 보통이 경우 일은 같은 자바 스크립트를 사용하여 클래스를 추가 .. 및 연결이다 CSS는 AS를 :hover이 클래스에
사용해보십시오
theElement.addEventListener('onmouseover',
function(){ theElement.className += ' hovered' });
또는 이전 브라우저의 경우 :
theElement.onmouseover = function(){theElement.className += ' hovered'};
물론 onmouseout요소를 떠날 때 "hovered"클래스를 제거하려면 을 사용해야 합니다.
attachEvent()것이 사용됩니다.
addEventListener하며 이벤트를 첨부하는 가장 좋은 방법입니다. shimming attachEvent은 IE8 (이하)에서만 필요합니다. Yotam, onmouseover속성을 직접 설정하여 (이벤트 리스너를 추가하는 대신) 다른 핸들러를 추가하면 현재 설정된 이벤트를 재정의합니다. 차이점에 대한 이 질문 을 참조하십시오 .
CSS 의사 클래스를 요소에 적용 할 수있는 라이브러리 인 pseudo : styler를 사용할 수 있습니다 .
(async () => {
let styler = new PseudoStyler();
await styler.loadDocumentStyles();
document.getElementById('button').addEventListener('click', () => {
const element = document.getElementById('test')
styler.toggleStyle(element, ':hover');
})
})();
면책 조항 : 저는이 도서관의 공동 저자입니다. 특히 페이지의 CSS 규칙을 제어 할 수없는 Chrome 확장 프로그램에서 사용하기 위해 교차 출처 스타일 시트를 추가로 지원하도록 설계했습니다.
window.getComputedStyle(<youElement>)의사 스타일을 설정 한 후 함께 결합하더라도 실제로 꽤 잘 작동하는 것 같습니다 . 감사!
DOM 조작 후 CSS를 검사하고 싶다고 가정하고 있지만 마우스를 devtools로 다시 이동하자마자 이벤트는 더 이상 해당 html 요소에서 활성화되지 않습니다. 자바 스크립트 이벤트를 위해 devtools에서 : hover 옵션과 같은 것을 원할 것입니다. 존재하지 않지만 시뮬레이션 할 수 있습니다.
자바 스크립트가 비활성화 되었기 때문에 요소를 다시 수정할 기회가 없습니다. devtools로 이동하여 마치 마우스를 가리 키거나 클릭하거나 다른 작업을 수행하는 것처럼 CSS와 HTML을 검사 할 수 있습니다. 완료되면 명령 패널로 다시 이동하여 'JavaScript 활성화'를 선택하십시오.
:hov스타일 검사기 상단 ( "필터"입력 상자 옆)에 버튼이 있습니다. 클릭 :hov팽창을 체크 박스의 시리즈를 각각 pseudoclass으로 표시 : :active, :focus, :focus-within, :hover,와 :visited. 그리고 이러한 상자 중 하나를 선택하면 검사중인 요소에서 해당 가상 클래스가 활성화됩니다.
:hover것은 요소에 대한 강제 상태 라고 생각합니다 .