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


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 动态将数字金额转化为中文大写金额
May 14 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
Oct 30 Javascript
jQuery中empty()方法用法实例
Jan 16 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
Mar 30 Javascript
深入理解JavaScript中的对象
Jun 04 Javascript
JavaScript常用字符串与数组扩展函数小结
Apr 24 Javascript
Bootstrap按钮下拉菜单组件详解
May 10 Javascript
JavaScript设计模式之建造者模式实例教程
Jul 02 Javascript
详解vscode中vue代码颜色插件
Oct 11 Javascript
vue实现百度搜索功能
Dec 28 Javascript
微信小程序(订阅消息)功能
Oct 25 Javascript
微信小程序新闻网站详情页实例代码
Jan 10 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文件上传表单摘自drupal的代码
2011/02/15 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
python进程与线程小结实例分析
2018/11/11 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
Javascript中的数学函数
2007/04/04 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
js 居中漂浮广告
2010/03/21 Javascript
Dojo 学习要点
2010/09/03 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
python 运用Django 开发后台接口的实例
2018/12/11 Python
pytorch实现查看当前学习率
2020/06/24 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
信息技术培训感言
2014/03/06 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
霸气队列口号
2014/06/18 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
高中生毕业评语
2014/12/30 职场文书
婚礼答谢词
2015/01/04 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang