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


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 拾漏补遗
Dec 27 Javascript
jQuery 获取URL的GET参数值的小例子
Apr 18 Javascript
jquery自定义类似$.ajax()的方法实现代码
Aug 13 Javascript
jquery通过ajax加载一段文本内容的方法
Jan 15 Javascript
jQuery的deferred对象使用详解
Sep 25 Javascript
JS模拟实现ECMAScript5新增的数组方法
Mar 20 Javascript
分享一个vue项目“脚手架”项目的实现步骤
May 26 Javascript
javascript 易错知识点实例小结
Apr 25 Javascript
JS实现简易贪吃蛇游戏
Aug 24 Javascript
浅析JavaScript预编译和暗示全局变量
Sep 03 Javascript
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
HTML+JS实现在线朗读器
Feb 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
对javascript和select部件的结合运用
2006/10/09 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
javascript中的隐式调用
2018/02/10 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
小程序实现投票进度条
2019/11/20 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
window下eclipse安装python插件教程
2017/04/24 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
python算的上脚本语言吗
2020/06/22 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
小学生获奖感言范文
2014/02/02 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
教研活动总结
2014/04/28 职场文书
连带责任保证书
2014/04/29 职场文书
大学班级学风建设方案
2014/05/01 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
阿甘正传观后感
2015/06/01 职场文书
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL