微信小程序实现可拖动悬浮图标(包括按钮角标的实现)


Posted in Javascript onDecember 29, 2020

在制作商城类微信小程序的过程中,我们经常会碰到需要增加可拖动悬浮图标的情况,本文简单的介绍一下可拖动悬浮按钮的实现。

运行截图:

微信小程序实现可拖动悬浮图标(包括按钮角标的实现)

主要代码:

js:

var startPoint
Page({
 data: {
 //按钮位置参数
 buttonTop: 0,
 buttonLeft: 0,
 windowHeight: '',
 windowWidth: '',
 //角标显示数字
 corner_data:0,
 },
 onLoad:function(){
 //定义角标数字
 this.setData({
  corner_data:3
 })
 // 获取购物车控件适配参数
 var that =this;
 wx.getSystemInfo({
  success: function (res) {
  console.log(res);
  // 屏幕宽度、高度
  console.log('height=' + res.windowHeight);
  console.log('width=' + res.windowWidth);
  // 高度,宽度 单位为px
  that.setData({
   windowHeight: res.windowHeight,
   windowWidth: res.windowWidth,
   buttonTop:res.windowHeight*0.70,//这里定义按钮的初始位置
   buttonLeft:res.windowWidth*0.70,//这里定义按钮的初始位置
  })
  }
 })
 },
 //可拖动悬浮按钮点击事件
 btn_Suspension_click:function(){
 //这里是点击购物车之后将要执行的操作
 wx.showToast({
  title: '点击成功',
  icon:'success',
  duration:1000
 })
 },
 //以下是按钮拖动事件
 buttonStart: function (e) {
 startPoint = e.touches[0]//获取拖动开始点
 },
 buttonMove: function (e) {
 var endPoint = e.touches[e.touches.length - 1]//获取拖动结束点
 //计算在X轴上拖动的距离和在Y轴上拖动的距离
 var translateX = endPoint.clientX - startPoint.clientX
 var translateY = endPoint.clientY - startPoint.clientY
 startPoint = endPoint//重置开始位置
 var buttonTop = this.data.buttonTop + translateY
 var buttonLeft = this.data.buttonLeft + translateX
 //判断是移动否超出屏幕
 if (buttonLeft+50 >= this.data.windowWidth){
  buttonLeft = this.data.windowWidth-50;
 }
 if (buttonLeft<=0){
  buttonLeft=0;
 }
 if (buttonTop<=0){
  buttonTop=0
 }
 if (buttonTop + 50 >= this.data.windowHeight){
  buttonTop = this.data.windowHeight-50;
 }
 this.setData({
  buttonTop: buttonTop,
  buttonLeft: buttonLeft
 })
 },
 buttonEnd: function (e) {
 }
})

wxml:

<!--可拖动按钮控件表-->
<!--buttonStart和buttonEnd一定不能用catch事件,否则按钮点击事件会失效-->
<view class="btn_Suspension" bindtap="btn_Suspension_click" catchtouchmove="buttonMove" bindtouchstart="buttonStart" bindtouchend="buttonEnd" style="top:{{buttonTop}}px;left:{{buttonLeft}}px;">
 <image class="Suspension_logo" src="../images/Suspension.png"></image><!--这里是按钮图标,下载地址会在文章底部说明-->
 <view wx:if="{{corner_data==0}}"></view>
 <view wx:else>
  <view class="cornorMark">
  <text>{{corner_data}}</text>
  </view>
 </view>
 </view>

wxss:

Page{
 background: #f5f5f5;
}
/**可拖动悬浮按钮样式表**/
.btn_Suspension{
 position: fixed;
 height: 100rpx;
 width: 100rpx;
 background-color: rgba(255, 255, 255, 0.755);
 border-radius: 100%;
 display: flex;
 align-items: center;
 justify-content: center;
 z-index: 99999;
 box-shadow: 1px 0px 1px 1px #ede7e7;
}
.Suspension_logo{
 position:absolute;
 height:50%;
 width:50%;
 left:23%;
 top:27%
}
.cornorMark{
 position:absolute;
 background: rgb(242, 109, 38);
 border:1px solid rgb(242, 109, 38);
 border-radius: 100px;
 width:30rpx;
 height:30rpx;
 top:-17rpx;
 right:3rpx;
 color:#fff;
 font-size: 12px;
 text-align: center;
}
.cornorMark text{
 position:absolute;
 width:100%;
 left:0%;
 text-align: center;
 top:-1px;
}

图标素材下载地址:

Iconfont阿里巴巴矢量图标库:https://www.iconfont.cn/

到此这篇关于微信小程序实现可拖动悬浮图标(包括按钮角标的实现)的文章就介绍到这了,更多相关小程序实现悬浮图标内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Javascript 代码也可以变得优美的实现方法
Jun 22 Javascript
ToolTips JQEURY插件之简洁小提示框效果
Nov 19 Javascript
手动初始化Angular的模块与控制器
Dec 26 Javascript
js鼠标移动时禁止选中文字
Feb 19 Javascript
node.JS md5加密中文与php结果不一致的解决方法
May 05 Javascript
js解决软键盘遮挡输入框的问题分享
Dec 19 Javascript
前端MVVM框架解析之双向绑定
Jan 24 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
Apr 12 Javascript
JS正则表达式封装与使用操作示例
May 15 Javascript
layui table 列宽百分比显示的实现方法
Sep 28 Javascript
JS+CSS实现动态时钟
Feb 19 Javascript
jQuery实现鼠标拖动图片功能
Mar 04 jQuery
vue中配置scss全局变量的步骤
Dec 28 #Vue.js
为什么推荐使用JSX开发Vue3
Dec 28 #Vue.js
Vue仿百度搜索功能
Dec 28 #Vue.js
node.js通过Sequelize 连接MySQL的方法
Dec 28 #Javascript
解决elementui表格操作列自适应列宽
Dec 28 #Javascript
微信小程序视频弹幕发送功能的实现
Dec 28 #Javascript
React实现todolist功能
Dec 28 #Javascript
You might like
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
apache php模块整合操作指南
2012/11/16 PHP
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
jquery密码强度校验
2015/12/02 Javascript
Bootstrap列表组学习使用
2017/02/09 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
Python之PyUnit单元测试实例
2014/10/11 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
python使用super()出现错误解决办法
2017/08/14 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
python3中替换python2中cmp函数的实现
2019/08/20 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
优秀英语专业毕业生求职信
2013/11/23 职场文书
驾驶员岗位职责
2014/01/29 职场文书
家长会主持词
2014/03/26 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
公司任命书范本
2014/06/04 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
2015年平安创建工作总结
2015/04/29 职场文书
《猴王出世》教学反思
2016/02/23 职场文书