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


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 相关文章推荐
jQuery 跨域访问问题解决方法
Dec 02 Javascript
JQuery自定义事件的应用 JQuery最佳实践
Aug 01 Javascript
javascript的内存管理详解
Aug 07 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
Aug 26 Javascript
微信小程序 获取微信OpenId详解及实例代码
Oct 31 Javascript
Linux CentOS系统下安装node.js与express的方法
Apr 01 Javascript
解决vue router使用 history 模式刷新后404问题
Jul 19 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
Aug 14 Javascript
浅谈react性能优化的方法
Sep 05 Javascript
ES6使用export和import实现模块化的方法
Sep 10 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 Javascript
在Vue中获取自定义属性方法:data-id的实例
Sep 09 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
?繁体转换的class
2006/10/09 PHP
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
nginx 设置多个站跨域
2021/03/09 Servers
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
js文字横向滚动特效
2015/11/11 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
python时间整形转标准格式的示例分享
2014/02/14 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
Django实现表单验证
2018/09/08 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
python内存管理机制原理详解
2019/08/12 Python
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
女性时尚网购:Chic Me
2019/07/30 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
大学生毕业求职的自我评价
2013/09/29 职场文书
销售顾问岗位职责
2014/02/25 职场文书
师范生求职信
2014/06/14 职场文书
导航工程专业自荐信
2014/09/02 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
质量整改报告范文
2014/11/08 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
惊天动地观后感
2015/06/10 职场文书
房贷工资证明范本
2015/06/12 职场文书
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs