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


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 相关文章推荐
js打印纸函数代码(递归)
Jun 18 Javascript
按钮JS复制文本框和表格的代码
Apr 01 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
Apr 22 Javascript
js动态往表格的td中添加图片并注册事件
Jun 12 Javascript
Javascript判断图片尺寸大小实例分析
Jun 16 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
Apr 03 Javascript
JS 获取HTML标签内的子节点的方法
Sep 21 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
Feb 08 Javascript
axios post提交formdata的实例
Mar 16 Javascript
微信小程序实现多选框功能的实例代码
Jun 24 Javascript
处理JavaScript值为undefined的7个小技巧
Jul 28 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
Jul 28 Javascript
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 过滤器实现代码
2010/08/09 PHP
php文件读取方法实例分析
2015/06/20 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
Gird事件机制初级读本
2007/03/10 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
使用python实现BLAST
2018/02/12 Python
python写入已存在的excel数据实例
2018/05/03 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
python实现批量注册网站用户的示例
2019/02/22 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
动物学专业毕业生求职信
2013/10/11 职场文书
关于环保的建议书400字
2014/03/12 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电