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


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 相关文章推荐
SWFObject 2.1以上版本语法介绍
Jul 10 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
Dec 04 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
Jun 04 Javascript
jquery win 7透明弹出层效果的简单代码
Aug 06 Javascript
jquery如何判断表格同一列不同行input数据是否重复
May 14 Javascript
Javascript代码实现仿实例化类
Apr 03 Javascript
老生常谈遮罩层 滚动条的问题
Apr 29 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
Dec 08 Javascript
深入理解JavaScript中的尾调用(Tail Call)
Feb 07 Javascript
详解angularjs跨页面传参遇到的一些问题
Nov 01 Javascript
JS实现的小火箭发射动画效果示例
Dec 08 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
Apr 15 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(8) php 数组
2010/03/05 PHP
php array_search() 函数使用
2010/04/13 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
JS代码放在head和body中的区别分析
2011/12/01 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
python正则分析nginx的访问日志
2017/01/17 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
python 实现矩阵填充0的例子
2019/11/29 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
python求前n个阶乘的和实例
2020/04/02 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
大学生自我鉴定评语
2014/01/27 职场文书
英语国培研修感言
2014/02/13 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
目标责任书范本
2014/04/16 职场文书
农业生产宣传标语
2014/10/08 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
Redis可视化客户端小结
2021/06/10 Redis