当前位置: 首页 > Web前端 > HTML5

网页高仿饭登H5-微信音乐播放浮球效果

时间:2023-04-05 15:31:56 HTML5

这两天完成了一个仿饭登H5的音乐播放浮球效果。这种效果类似于微信音乐播放浮球的效果。今天总结一下实现的思路(基于Vue实现)。先来看看泛登H5的效果。再来看看我的实现,完美,哈哈。实现起来并不复杂,主要是一步步搞清楚下面的实现步骤:第一步:限制球在固定范围内滑动第二步:当滑动停止时,边缘吸力的效果ballStep3:点击边缘吸力状态下的小球变身为音频播放控制面板,点击磨砂玻璃,又变回小球。第四步:背景磨砂玻璃效果逐步讲解。第一步:球被限制在一个固定的范围内。滑动touchmove可以获取小球的滑动事件,所以可以使用touchmove来限制小球的滑动范围。先将handleTouchMove函数传给小球的touchmove,在handleTouchMove中获取滑动事件e,使用e.targetTouches[0]获取手指滑动的坐标clientX和clientY,计算出left和top值球来控制小球小球用手指滑动。

当手指或鼠标向左滑动时当屏幕到达边界时,将小球的左侧重置为0,以防止小球超出左边界。当滑动超出右边界时,将球的左侧重置为视口的宽度减去球的宽度,使球不超出右边界。顶部和底部边界也一样,当手指或鼠标滑过顶部边界时,将小球的top重置为0,超过底部边界时,将top重置为视口的高度减去视口的高度球。当然滑动幅度可以自己控制。详细控制小球滑动的代码如下://限制小球在一个范围内滑动handleTouchMove(e){this.isAnimated=false;//手指拖动小球滑动时不需要动画,滑动停止时添加动画this.$refs.circle.style.borderRadius="50%";让offsetX=e.targetTouches[0].clientX-this.circleWidth/2;//减去this.circleWidth/2目的是让手指按在浮球中间letoffsetY=e.targetTouches[0].clientY-this.circleHeight/2;//减去this.circleHeight/2的目的是让手指按在浮球中间if(offsetX<=0+this.placeholderWidth){offsetX=0+this.placeholderWidth;//不允许浮球完全对齐}elseif(offsetX>=document.documentElement.clientWidth-this.circleWidth-this.placeholderWidth//微信浮球没有完全对齐,离边缘有一段距离screen){offsetX=document.documentElement.clientWidth-this.circleWidth-this.placeholderWidth;}if(offsetY<=0+this.placeholderWidth){offsetY=0+this.placeholderWidth;}elseif(offsetY>=document.documentElement.clientHeight-this.circleHeight-this.placeholderWidth){offsetY=document.documentElement.clientHeight-this.circleHeight-this.placeholderWidth;}this.$refs.circle.style.left=offsetX+"px";这.$refs.circle.style.top=offsetY+"px";},Step2:停止滑动,浮球会随着吸边效果滑动小球。手指松开时,小球需要吸附到屏幕边缘通过小球中心的x坐标判断,如果x坐标小于屏幕宽度的一半,就会吸附到屏幕左侧,如果大于等于屏幕宽度的一半,它会被吸附到屏幕右侧,代码会经过一个wave://touchend时,hover球吸边显示handleTouchEnd(e){this.isAnimated=true;//手指拖动小球滑动时不需要动画,滑动停止时加入动画letcircleCenterX=parseInt(this.$refs.circle.style.left.replace("px",""))+this.circleWidth/2;//浮球中心x坐标letcircleCenterY=parseInt(this.$refs.circle.style.top.replace("px",""))+this.circleHeight/2;//浮球中心的y坐标if(circleCenterX=this.clientHeight-this.placeholderBottom){this.$refs.circle.style.top=this.clientHeight-这个。占位符BottOM+“像素”;}},第三步:点击吸边球,变身为音频播放控制面板。当小球贴在屏幕边缘时,点击小球,小球就会展开成一个音频控制面板。单击磨砂玻璃背景。当球收缩并恢复到原来的形状时,我将球的圆圈与音频控制面板的内容分开,如下所示。
用circle-box包裹悬浮球的圆圈和音频控制面板的内容,用变量showCircleContent判断是悬浮球还是当前应显示音频播放控制面板。单击悬停球时,showCircleContent为true,球会拉伸并变形为音频播放控制面板。点击磨砂玻璃背景,设置showCircleContent为false,音频播放控制面板缩回悬浮球。当伸缩动画球从浮动球变为音频控制面板,或从控制面板变为浮动球时,会有一个动画。此动画应在touchend处添加并在touchmove处移除。因为如果小球滑动的时候有动画,就会卡住。使用isAnimated控制动画的增删改查,touchend时为true,touchmove时改为false。第四步:背景毛玻璃效果backdrop-filter属性实现毛玻璃效果。理解一下,滤镜只能让当前元素产生模糊效果,而当前元素下的元素还是清晰的。background-filter可以模糊当前元素和后面的元素,从而达到磨砂玻璃的效果。背景滤镜:模糊(10px);//毛玻璃效果,对ios-webkit-backdrop-filter有效:blur(10px);但是目前backdrop-filter的兼容性不是很好,毛玻璃效果在IOS平台可以看到,Android平台看不到。OK,以上就是实现音乐播放浮球的思路总结。其实在执行过程中还有很多细节需要处理。想了解更多详情,可以关注我的公众号“程序员张擎天”,在后台回复“浮球”即可获取完整的demo源码。如果对你有帮助,点赞、评论、赞赏都是对我的鼓励,是支持我写下去的动力,谢谢!本文首发于微信公众号“程序员张擎天”。欢迎第一时间关注获取最新分享,共同进步。