#javascript #html #dom #html5-video #standards
#javascript #HTML #dom #html5-видео #стандарты
Вопрос:
Я попытался отключить звук, только чтобы узнать setAttribute
, что он вообще не работает под Firefox 80.0.1
и Chrome 85.0.4183.102
. Насколько я знаю, это стандартный способ установки логического атрибута.
video.setAttribute("muted", "muted");
На удивление, video.muted = true
работает. Я не уверен, что он вообще переносим, поскольку он не использует стандартную функцию SetAttribute
, а значение не является канонической копией muted
.
Комментарии:
1.
.setAttribute()
устанавливает его на узле DOM, не обязательно на экземпляре.
Ответ №1:
muted
Атрибут сопоставляется с .defaultMuted
IDL, а не напрямую со .muted
свойством.
Для .muted
свойства сначала устанавливается это .defaulMuted
значение, но последующее изменение .defaultMuted
значения не приведет к изменению .muted
значения.
Это означает, что при синтаксическом анализе атрибут установит начальное значение .muted
, но затем изменение атрибута не произойдет.
const vid = document.getElementById("vid");
console.log( "defaultMuted:", vid.defaultMuted ); // true (because it has the attribute)
vid.removeAttribute( "muted" ); // set defaultMuted to false
console.log("### removed Attribute");
console.log( "has attribute:", vid.getAttribute( "muted" ) !== null );
console.log( "defaultMuted:", vid.defaultMuted ); // false (no attribute anymore)
console.log( "muted:", vid.muted ); // true (still muted anyway)
vid.defaultMuted = true; // set back the attribute through IDL
console.log("### set defaultMuted to true");
console.log( "has attribute:", vid.getAttribute( "muted" ) !== null ); // "" (which is a truthy value for booleans, would have been `null` if unset)
<video controls id="vid" muted></video>
Правильный способ динамического отключения / включения HTMLMediaElement действительно заключается в его .muted
свойстве, но это не устанавливает никаких атрибутов для элемента.
Комментарии:
1.Извините, я не понимаю. Я понимаю
defaultMuted
, что отражаетmuted
в соответствии со стандартом. Но как это связано сremoveAttribute
настройкойdefaultMuted
notmuted
?2. Ваш комментарий тоже трудно понять; P Если вы действительно понимаете, что
.defaultMuted
свойство отражаетmuted
атрибут, вы, конечно, понимаете, что удаление этого логического атрибута приведет.defaultMuted
кfalse
. Я имею в виду, что здесь означает «отражает».3. Я имел в виду, что любой из них должен работать, верно?
4. С какой целью? Ни один из них не изменит
.muted
свойство после первоначального синтаксического анализа.5. Для меня
defaultMuted
это похоже на прокси иmuted
является реальным.reflects
это односторонняя связь, верно? Почему мы не можем установитьmuted
напрямую?