You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
页面滚动高度大于视频所在的位置:那么就是视频的 bottom 值相对可视窗口的值要小于0,我们需要设定一个包裹 video 标签的 div 方便计算,其高度是原设定 video 的高度。即元素脱离原文档布局
video 元素可以拖拽,那么其定位需要被改变为 fixed
video 元素在可视区内自由拖动,那么需要对其 top, left 值进行限定
所以我们设定下面的 demo 布局:
<divid="anchor" #anchor><divclass="video" id="video" #video><divclass="masker"></div><videowidth="100%" height="100%" controlsposter="assets/poster.png"><sourcesrc="../assets/demo.mp4" type="video/mp4" />
Your browser does not support.
</video></div></div>
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情
在上两篇文章中,我们学习了元素中必知重要属性和方法和 Angular 中自定义 Video 操作,没有度过的读者可先了解。
那么,现在有这么一个需求,你会怎么实现呢?
页面中 video 标签,当滚动高度超过其位置之后,将其设置为可在可视区域自由拖拽。
一个不错的
Idea
,如果你使用Angular
的@angular/cdk/drag-drop
可以轻松实现,但是我们这里不使用工具。好吧,我们来分析下实现的思路:
bottom
值相对可视窗口的值要小于0,我们需要设定一个包裹video
标签的div
方便计算,其高度是原设定video
的高度。即元素脱离原文档布局video
元素可以拖拽,那么其定位需要被改变为fixed
video
元素在可视区内自由拖动,那么需要对其top
,left
值进行限定所以我们设定下面的
demo
布局:有下面这些预定的样式:
这里还引入了
rxjs
来操作。元素脱离原文档布局
刚才已经分析了
video
元素脱离文档的临界调节了:video 的外
div
,即#anchor
元素的相对视图的bottom < 0
。所以我们有:先获取
anchor
元素对象,监听页面对象document
滚动(我们这里加入了防抖函数优化),当bottom < 0
的时候,将相关的样式video-fixed
添加给video
。元素拖拽
接下来就是实现
video
元素的拖拽。这里我们要监听video
元素的三个事件,分别是鼠标按下mousedown
,鼠标移动mousemove
和鼠标抬起mouseup
。我们监听目标元素(filter 函数)被鼠标按下,然后鼠标可以在
document
范围内移动(这里用节流函数优化了下),直到监听到鼠标抬起。在移动的过程中,计算目标元素的相对可视窗口左侧和顶部的距离,将值赋予到left
和top
。这里的计算
move.clientX - down.offsetX, window.innerWidth - this.video.nativeElement.offsetWidth
,相关的概念也许你不是很清楚,不过没关系,上面👆的内容,理解思路即可。相关的知识点会在接下来的文章介绍。最后,我们得到的效果如下👇
【完】✅
The text was updated successfully, but these errors were encountered: