如何使用 onclick 事件切换反向操作
How to toggle reverse action using onclick event
我正在尝试将视频标签 object-fit 从 contain 更改为 fill,这工作正常,但我想执行相反的操作,当用户再次单击同一按钮时,它会将 属性 从 fill 更改为包含。
<a href="#" onclick="changeStyle()"><i class="fa fa-play-circle"></i></a>
<video controls poster="source-to-thumb.jpg" id="player" style="object-fit:contain;">
<source src="source-to-file.mp4" type="video/mp4"/>
</video>
<script>
var video = document.getElementsByTagName('video')[0];
function changeStyle() {
if(video.style.objectfit === 'fill') {
video.style.objectFit = 'contain';
} else {
video.style.objectFit = 'fill'
}
}
</script>
如有任何建议,我们将不胜感激。
使用 CSS classes 而不是使用内联样式(应尽可能避免)。然后你可以简单地切换 class.
的使用
另外,请参阅我的 HTML、CSS 和 JavaScript 关于更正您的其他代码的一些问题的评论。特别是 avoid methods that return "live" node list, like getElementsByTagName()
.
// Don't scan the whole document for all the matching
// elements when you know that there will only be one.
// Use getElementById() if there is an id.
var video = document.getElementById('player');
// Set up events in JavaScript, not HTML
document.querySelector("i.fa-play-circle").addEventListener("click", function(){
// Just toggle the use of the other class:
video.classList.toggle("fill");
});
/* Use CSS classes when possible */
i.fa-play-circle { cursor:pointer; }
/* This will be applied to the video by default */
video {
object-fit:contain;
border:1px solid black;
height:150px;
width:300px;
}
/* This class will be toggled on and off when the icon is clicked.
When it gets toggled on, the new object-fill value will override
the previous one. When it gets toggled off, the previous style
will be restored. */
.fill {
object-fit:fill;
}
<!-- Don't use hyperlinks just as a JavaScript hook.
Hyperlinks are for navigation and using them for
other purposes can cause problems for those using
screen readers.
Any visible element supports a click event. Here,
you can just set up the click event on the <i> element
that people will be clicking on in the first place.
Also, don't use inline HTML event attributes.
Instead, separate your JavaScript into a script element.
-->
<i class="fa fa-play-circle">Hit play and then click Me several times</i><br>
<video controls poster="source-to-thumb.jpg" id="player">
<source src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" type="video/mp4"/>
</video>
我正在尝试将视频标签 object-fit 从 contain 更改为 fill,这工作正常,但我想执行相反的操作,当用户再次单击同一按钮时,它会将 属性 从 fill 更改为包含。
<a href="#" onclick="changeStyle()"><i class="fa fa-play-circle"></i></a>
<video controls poster="source-to-thumb.jpg" id="player" style="object-fit:contain;">
<source src="source-to-file.mp4" type="video/mp4"/>
</video>
<script>
var video = document.getElementsByTagName('video')[0];
function changeStyle() {
if(video.style.objectfit === 'fill') {
video.style.objectFit = 'contain';
} else {
video.style.objectFit = 'fill'
}
}
</script>
如有任何建议,我们将不胜感激。
使用 CSS classes 而不是使用内联样式(应尽可能避免)。然后你可以简单地切换 class.
的使用另外,请参阅我的 HTML、CSS 和 JavaScript 关于更正您的其他代码的一些问题的评论。特别是 avoid methods that return "live" node list, like getElementsByTagName()
.
// Don't scan the whole document for all the matching
// elements when you know that there will only be one.
// Use getElementById() if there is an id.
var video = document.getElementById('player');
// Set up events in JavaScript, not HTML
document.querySelector("i.fa-play-circle").addEventListener("click", function(){
// Just toggle the use of the other class:
video.classList.toggle("fill");
});
/* Use CSS classes when possible */
i.fa-play-circle { cursor:pointer; }
/* This will be applied to the video by default */
video {
object-fit:contain;
border:1px solid black;
height:150px;
width:300px;
}
/* This class will be toggled on and off when the icon is clicked.
When it gets toggled on, the new object-fill value will override
the previous one. When it gets toggled off, the previous style
will be restored. */
.fill {
object-fit:fill;
}
<!-- Don't use hyperlinks just as a JavaScript hook.
Hyperlinks are for navigation and using them for
other purposes can cause problems for those using
screen readers.
Any visible element supports a click event. Here,
you can just set up the click event on the <i> element
that people will be clicking on in the first place.
Also, don't use inline HTML event attributes.
Instead, separate your JavaScript into a script element.
-->
<i class="fa fa-play-circle">Hit play and then click Me several times</i><br>
<video controls poster="source-to-thumb.jpg" id="player">
<source src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" type="video/mp4"/>
</video>