vue 实现微信浮标效果
微信浮窗,一个熟悉又实用的功能,几乎每个人都曾在阅读公众号文章时使用过。浮窗就像一个临时停靠站,让我们在处理微信消息的随时回到正在阅读的文章。今天,我们来聊聊如何在Vue中实现微信浮窗的效果。
当我们谈论微信浮窗时,我们指的是一个可以拖拽、左右吸附、在页面上下滑动时隐藏的组件。这个组件的核心功能就是拖拽。无论是鼠标还是移动端的触摸,都涉及到事件的三个阶段:接触元素、元素移动、离开元素。对于鼠标,这三个阶段对应的事件名称是`mousedown`、`mousemove`和`mouseup`;而对于触摸操作,则是`touchstart`、`touchmove`和`touchend`。
要实现拖拽功能,元素的定位是关键。我们采用绝对定位,通过改变元素的`top`和`left`属性来移动它。那么如何获取新的`top`和`left`值呢?这需要我们关注到元素移动过程中,触摸位置的变化。黄色区域是拖拽的元素,蓝色的点是鼠标或手指触摸的位置。在元素移动的过程中,这些值也会随着改变。我们只要计算出新的触摸位置和最初触摸位置的横坐标和竖坐标的变化,就可以得到移动后的`left`值。
拖拽区域默认是在拖拽元素的父级元素内。我们需要计算出父级元素的宽高。如果父级的宽高是由异步事件改变的,那么获取时可能会不准确。这时,我们需要调整布局或改变获取宽高的方式。
在拖拽的三个阶段中,我们需要完成不同的任务。触摸元素时,存储当前的`left`值和触摸点的`pageX`、`pageY`;在元素拖拽过程中,计算当前的`pageX`、`pageY`与初始值的差值,更新元素的位置;拖拽结束时,重置初始值。
除了拖拽功能,我们还要实现左右吸附和页面滑动时隐藏的功能。左右吸附的实现方式是,在手指离开后,根据元素的X轴中心与父级元素的X轴中心的比较,来决定是往左还是往右移动。而对于页面上下滑动时隐藏的功能,我们可以通过监听父级容器的滑动事件,当`scrollTop`的值发生变化时,就调整元素的`left`值来实现。
Vue实现微信浮标效果——draggable组件详解
在Vue框架中,我们有时需要实现类似微信浮标那样的拖拽功能。下面是一个名为“draggable”的Vue组件的详细实现,让我们深入理解其代码并对其进行优化。
该组件主要用于实现元素的拖拽功能,同时支持吸附、滑动隐藏等特性。我们先来看一下其模板和脚本部分。
模板部分:
该组件使用了一个`
脚本部分:
组件的脚本部分主要包括props、data、methods和watchers。
props: 定义了一些组件的输入属性,如元素的宽高、初始位置、是否开启拖拽、是否开启吸附、是否开启滑动隐藏等。
data: 定义了一些组件的内部状态,如元素的原始位置、当前位置、父级元素的宽高等。
methods: 定义了一些组件的方法,如`elementTouchDown`用于监听触摸或鼠标按下事件,`elementMove`用于处理元素移动过程,`handleUp`用于处理触摸或鼠标松开事件等。
watchers: 用于监听一些属性的变化,并做出相应的响应。如`rawTopChange`和`rawLeftChange`用于监听元素的上边距和左边距的变化,并对其进行边界判断;`scorllTopChange`用于监听父级滚动条的变化,以实现滑动隐藏功能。
组件还使用了一些辅助函数和常量,如`calcDragLimits`用于计算元素的拖拽范围,`getParentSize`用于获取父级元素的尺寸,`resetBoundsAndMouseState`用于重置边界和鼠标状态等。
样式部分:
该组件的样式部分主要包括`.dra`和`.dra-tran`两个类,分别用于设置元素的触摸操作和过渡效果。
辅助模块:
`dom.ts`文件定义了一些辅助函数,用于添加和移除事件监听器,以适应不同浏览器和版本的需求。
总结:
该draggable组件实现了元素的拖拽功能,并支持吸附、滑动隐藏等特性。其代码结构清晰,逻辑严谨,易于理解和扩展。在实际项目中,可以根据需求对其进行定制和优化,以满足不同的业务需求。该组件的样式和交互效果也可以根据具体需求进行调整和优化,以提升用户体验。
在这个充满神秘与奇幻的世界里,Cambrian的“body”正在悄然渲染着一种独特的氛围。它的存在仿佛是一首未完成的诗篇,等待着我们去其中的奥秘。让我们一起走进这个奇妙的世界,揭开它的神秘面纱。
Cambrian的“body”,宛如一幅绚丽多彩的画卷,展现着生命的活力与多彩。它以独特的姿态,诠释着生命的多样性与奇妙性。在这里,每一个细节都充满了生机与活力,仿佛都在诉说着一个关于生命的故事。
我们将一起Cambrian的“body”所蕴含的丰富内涵。从它的起源到发展,再到未来的展望,每一个阶段都充满了无限的可能性。它像是一颗璀璨的明珠,闪耀着耀眼的光芒,吸引着我们去其中的奥秘。
这个神秘的世界充满了无尽的惊奇与惊喜。在这里,我们可以感受到生命的脉动与活力,感受到大自然的神奇与美妙。Cambrian的“body”仿佛是一个充满魔力的世界,让我们陶醉其中,流连忘返。
无论是它的形态、构造还是功能,Cambrian的“body”都展现着一种独特的魅力。它像是一个神秘的宝藏,等待着我们去发掘其中的宝藏。在这个充满奇幻的世界里,我们将一起揭开它的神秘面纱,其中的奥秘。
Cambrian的“body”是一个充满神秘与奇幻的世界,它展现着生命的多样性与奇妙性。让我们一起走进这个神秘的世界,感受生命的脉动与活力,其中的宝藏和奥秘。让我们沉醉在这个充满魔力的世界,一起领略生命的美丽与奇妙。
微信营销
- vue 实现微信浮标效果
- 浅析十款PHP开发框架的对比
- SWFUpload多文件上传及文件个数限制的方法
- js实现轮播图的两种方式(构造函数、面向对象)
- docker-compose部署php项目实例详解
- JS跨域交互(jQuery+php)之jsonp使用心得
- 原生js实现autocomplete插件
- Parcel.js + Vue 2.x 极速零配置打包体验教程
- 一文了解vue-router之hash模式和history模式
- Javascript常用小技巧汇总
- CodeIgniter表单验证方法实例详解
- php 遍历目录,生成目录下每个文件的md5值并写入
- mybatis+mysql 使用存储过程生成流水号的实现代码
- JavaScript中的函数模式详解
- Java获取-路径实现探讨
- canvas 实现中国象棋