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


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中的this绑定介绍
Sep 22 Javascript
JS正则表达式验证数字代码
Jan 28 Javascript
js校验表单后提交表单的三种方法总结
Feb 28 Javascript
javascript搜索框点击文字消失失焦时文本出现
Sep 18 Javascript
浅谈jQuery的offset()方法及示例分享
Jul 17 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
Dec 01 Javascript
使用react-router4.0实现重定向和404功能的方法
Aug 28 Javascript
修改npm全局安装模式的路径方法
May 15 Javascript
详解适配器在JavaScript中的体现
Sep 28 Javascript
JavaScript 性能提升之路(推荐)
Apr 10 Javascript
如何让微信小程序页面之间的通信不再变困难
Jun 03 Javascript
js实现for循环跳过undefined值示例
Jul 02 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
joomla组件开发入门教程
2016/05/04 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
js 事件小结 表格区别
2007/08/13 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
python获取外网ip地址的方法总结
2015/07/02 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
python利用百度AI实现文字识别功能
2018/11/27 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
实习教师自我鉴定
2013/09/27 职场文书
2014年大学班长工作总结
2014/11/14 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
python如何在word中存储本地图片
2021/04/07 Python
python中print格式化输出的问题
2021/04/16 Python
Redis基本数据类型String常用操作命令
2022/06/01 Redis