应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

vue中js让悬浮菜单div循环上下移动

2619人阅读 2020/7/28 17:57 总访问:5182721 评论:0 收藏:0 手机
分类: 前端

封装的方法:

  1. runEle() {
  2. const thisTemp = this
  3. const suspendmenuentrydiv = document.getElementById('suspendmenuentrydiv')
  4. const initValue = 66
  5. // 初始化一个不然好像获取不到
  6. suspendmenuentrydiv.style.bottom = initValue + 'px'
  7. let flag = true // 切换条件
  8. const num = 50 // 加到最大值
  9. let start = 0 // 起始值
  10. let isMove = true
  11. // 鼠标放上去就停止移动
  12. suspendmenuentrydiv.onmouseover = function() {
  13. isMove = false
  14. }
  15. // 鼠标移出就继续移动
  16. suspendmenuentrydiv.onmouseout = function() {
  17. isMove = true
  18. // 移出的时候把菜单设置为关闭
  19. // thisTemp.isShow = false
  20. }
  21. suspendmenuentrydiv.onmouseleave = function() {
  22. isMove = true
  23. // thisTemp.isShow = false
  24. }
  25. setInterval(function() {
  26. if (isMove) {
  27. if (flag) {
  28. start = start + 1
  29. if (start === num) {
  30. flag = false
  31. }
  32. } else {
  33. start = start - 1
  34. if (start === 0) {
  35. flag = true
  36. }
  37. }
  38. // 移出中把菜单设置为关闭试试
  39. thisTemp.isShow = false
  40. suspendmenuentrydiv.style.bottom = (initValue + start) + 'px'
  41. }
  42. }, 90)
  43. }

使用的时候调用一下方法即可

  1. mounted() {
  2. this.runEle()
  3. }

完整的代码,贴一下

  1. <!-- 悬浮菜单的统一入口 -->
  2. <template>
  3. <div>
  4. <!-- 悬浮菜单开始 -->
  5. <div v-drag id="suspendmenuentrydiv" class="realTranslationInfos">
  6. <div class="RealtranslationBox">
  7. <el-collapse-transition>
  8. <div v-show="isShow">
  9. <div style="margin-top: 12px;text-align: center;">
  10. <img
  11. draggable="false"
  12. src="@/assets/imgs/chat/xiaozu.png"
  13. alt=""
  14. width="56px"
  15. height="56px"
  16. @click="openChatMain()"
  17. >
  18. <div>
  19. 小足学习助手
  20. </div>
  21. </div>
  22. <div style="margin-top: 10px;text-align: center;margin-bottom: 10px;">
  23. <img
  24. draggable="false"
  25. src="@/assets/imgs/chat/feedback2.png"
  26. alt=""
  27. width="56px"
  28. height="56px"
  29. @click="openFeedbackDialog()"
  30. >
  31. <div>
  32. 用户反馈
  33. </div>
  34. </div>
  35. </div>
  36. </el-collapse-transition>
  37. <!-- src="@/assets/imgs/chat/entrygif.gif" -->
  38. <div style="height:66px;text-align: center;">
  39. <img
  40. draggable="false"
  41. src="@/assets/imgs/chat/entry.png"
  42. alt=""
  43. width="66px"
  44. height="66px"
  45. @click="showMneu()">
  46. </div>
  47. </div>
  48. </div>
  49. <!-- 悬浮菜单结束 -->
  50. <!-- 封装的弹窗组件 -->
  51. <FeedbackDialog ref="feedbackDialog" data-from-type="allin" />
  52. </div>
  53. </template>
  54. <script>
  55. import FeedbackDialog from '@/pages/feedback/feedbackDialog.vue'
  56. // collapse 展开折叠
  57. import CollapseTransition from 'element-ui/lib/transitions/collapse-transition'
  58. import Vue from 'vue'
  59. Vue.component(CollapseTransition.name, CollapseTransition)
  60. export default {
  61. // 组件名字
  62. name: 'FeedBack',
  63. components: {
  64. FeedbackDialog
  65. },
  66. // 组件参数
  67. props: {
  68. id: {
  69. type: String,
  70. default: ''
  71. },
  72. dataFromType: {
  73. type: [Number, String],
  74. default: 'allin'
  75. }
  76. },
  77. data() {
  78. return {
  79. isShow: false,
  80. // 用来给自己封装的弹窗组件传递参数
  81. dialogVisible: false
  82. }
  83. },
  84. mounted() {
  85. this.runEle()
  86. },
  87. // 组件方法
  88. methods: {
  89. runEle() {
  90. const thisTemp = this
  91. const suspendmenuentrydiv = document.getElementById('suspendmenuentrydiv')
  92. const initValue = 66
  93. // 初始化一个不然好像获取不到
  94. suspendmenuentrydiv.style.bottom = initValue + 'px'
  95. let flag = true // 切换条件
  96. const num = 50 // 加到最大值
  97. let start = 0 // 起始值
  98. let isMove = true
  99. // 鼠标放上去就停止移动
  100. suspendmenuentrydiv.onmouseover = function() {
  101. isMove = false
  102. }
  103. // 鼠标移出就继续移动
  104. suspendmenuentrydiv.onmouseout = function() {
  105. isMove = true
  106. // 移出的时候把菜单设置为关闭
  107. // thisTemp.isShow = false
  108. }
  109. suspendmenuentrydiv.onmouseleave = function() {
  110. isMove = true
  111. // thisTemp.isShow = false
  112. }
  113. setInterval(function() {
  114. if (isMove) {
  115. if (flag) {
  116. start = start + 1
  117. if (start === num) {
  118. flag = false
  119. }
  120. } else {
  121. start = start - 1
  122. if (start === 0) {
  123. flag = true
  124. }
  125. }
  126. // 移出中把菜单设置为关闭试试
  127. thisTemp.isShow = false
  128. suspendmenuentrydiv.style.bottom = (initValue + start) + 'px'
  129. }
  130. }, 90)
  131. },
  132. openFeedbackDialog() {
  133. // 调用子组件的方法打开弹窗
  134. this.$refs.feedbackDialog.openFeedbackDialog(this.dataFromType)
  135. },
  136. showMneu() {
  137. this.isShow = !this.isShow
  138. },
  139. openChatMain() {
  140. const page = this.$router.resolve({
  141. name: 'chatmain' // 这里是跳转页面的name
  142. })
  143. // console.log(page.href)
  144. window.open(page.href, '_blank') // 打开新的页面
  145. }
  146. }
  147. }
  148. </script>
  149. <style scoped="scoped" lang="scss">
  150. .realTranslationInfos {
  151. width: 60px;
  152. height: 60px;
  153. // background: red;
  154. position: fixed;
  155. // position: absolute;
  156. bottom: 66px;
  157. right: 23px;
  158. width:80px;
  159. // bottom: 122px;
  160. // right: -30px;
  161. .translationContent {
  162. min-height: 100px;
  163. line-height: 23px;
  164. width: 338px;
  165. padding: 18px 74px 19px 19px;
  166. background: #004CB3;
  167. opacity: 0.80;
  168. border-radius: 12px;
  169. color: #fff;
  170. position: fixed;
  171. // position: absolute;
  172. right: 58px;
  173. bottom: 22px;
  174. z-index: 99999;
  175. }
  176. .RealtranslationBox {
  177. // display: flex;
  178. align-items: center;
  179. position: absolute;
  180. right: 2px;
  181. bottom: 5px;
  182. z-index: 99999;
  183. background: #E7F4FF;
  184. border-radius: 37px;
  185. img {
  186. cursor: pointer;
  187. }
  188. }
  189. }
  190. </style>

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

vue.js+Layer实现表格数据绑定与更新

一:使用Vue.js绑定好数据与更新事件 使用v-on绑定好事件,在事件里边直接把该行数据传递进去,在更新方法里边就可以直接...

vue.js 实现省市联动

HTML代码&lt;divid=&quot;pro_citys&quot;&gt; 省:&lt;selectid=&quot;provice&quot;v-on:change=&quot;prochange()&quo...

vue.js常见问题

一:花括号当做字符串显示的问题1:检查下绑定到vue.js的id是否重复,如果id重复了,就有可能存在这种问题,因为有可能把数...

vue.js常用指令

v-html可以把字符串当成一个html来渲染,而不是原样输出Html类似.net mvc中的@Html.Raw()方法&lt;divv-html=&quot;item.tit...

干货!div滚动到一定位置就固定他。vue实现一侧滚动到底部就固定

尊重原创:转载请注名出处div滚动到一定位置就固定他,例如左边的内容很多,右边的内容很少,如果不处理滚动到一定位置后右...

vue.js常用指令,事件绑定等,vue过滤器解析状态过滤器多个参数。vue表格状态解析。vue解析类型,element ui解析类型,状态,el-tag

按照html的编码显示:v-html&lt;div class=&quot;font_info&quot; v-html=&quot;item.Content&quot;&gt;{{item.Content}}&l...

vue.js if用法

vue.js if可以做一些判断例如我们要把下面这个输出varvm=newVue({ el:&quot;#content&quot;, data:{ titles:[&quot;小明...

vue.js 学习日记第一章-安装vue开发环境

官网:https://cn.vuejs.org/v2/guide/ 这是一篇学习性文章,不定时更新,用来记录我学习vue.js的过程。 首先,是v...

vue.js 学习日记第二章-在vue编写function及一些简单指令

官网:https://cn.vuejs.org/v2/guide/ vue.js 学习日记第一章:http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第三章-vue的简单事件及事件修饰符

官网:https://cn.vuejs.org/v2/guide/ vue.js 学习日记第二章:http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第四章-vue文本框数据获取与绑定及computed计算属性

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第三章: http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第五章-v-if和v-for指令的使用方式

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第四章: http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第六章-vue组件初步学习

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第五章: http://www.tnblog.net/18323015640/article/details/2...

vue.js学习日记第七章-搭建脚手架

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第六章: http://www.tnblog.net/18323015640/article/details/2...

vue实现好友选效果

逛过vue官网肯定会发现一个有趣的指令“v-for”,相比与以前拼接html代码确实要上档次一点,而且减少了工作量,先看一波效...

js时间格式化vue.js时间格式化,带T 时间格式化

也可以借助moment库, 参考:https://www.tnblog.net/aojiancc2/article/details/8079moment库有点大,推荐可以使用day.js...