微信小程序-可移动菜单的实现过程详解


Posted in Javascript onJune 24, 2019

前言

我们可以经常看到手机app里有的菜单栏是悬浮在首页的,用户可以拖动和点击菜单栏进行交互,今天代码君就教大家利用小程序的控件,实现一个可移动的菜单,效果图是这样的,要实现这样的效果,需要引出我们今天的重要人物movable-view

movable-view属性介绍

属性名 作用 参数值
direction 设置movable-view的移动方向 属性值有all、vertical、horizontal、none
inertia movable-view是否带有惯性 true/false 默认是false
out-of-bounds 超过可移动区域后,movable-view是否还可以移动 true/false 默认是false
x 定义x轴方向的偏移,如果x的值不在可移动范围内,会自动移动到可移动范围;改变x的值会触发动画 number
y 定义y轴方向的偏移,如果y的值不在可移动范围内,会自动移动到可移动范围;改变y的值会触发动画 number
damping 阻尼系数,用于控制x或y改变时的动画和过界回弹的动画,值越大移动越快 number 默认是20
friction 摩擦系数,用于控制惯性滑动的动画,值越大摩擦力越大,滑动越快停止;必须大于0,否则会被设置成默认值 number默认是2

实现可移动菜单

一、wxml界面的实现

<view class='title-line'>
movable</view>
<movable-area class="moveArea">
<movable-view class='moveView' x="{{x}}" y="{{y}}" damping="40" direction="all" inertia='true'>菜单
</movable-view>
</movable-area>
<button class='button' type='primary' size='mini' bindtap='moveView'>点我随机滚动小方块</button>
<button class='button' type='primary' size='mini' bindtap='stopMove'>点我停止随机滚动</button>

界面布局比较简单,需要注意的几点

  1. movable-view 必须设置width和height属性,不设置默认为10px
  2. movable-view 默认为绝对定位,top和left属性为0px
  3. 当movable-view小于movable-area时,movable-view的移动范围是在movable-area内;当movable-view大于movable-area时,movable-view的移动范围必须包含movable-area(x轴方向和y轴方向分开考虑)
  4. movable-view必须在<movable-area/>组件中,并且必须是直接子节点,否则不能移动

二、xxx.js随机移动实现的逻辑

Page({
data: {
x: 0,
y: 0,
isStop:false,
},
moveView:function(e)
{
var that = this;
setTimeout(function () {
that.move(that);
}, 1000);
},
stopMove: function (e) {
this.setData({
isStop: true
})
},
move: function (that)
{
var randowX = that.GetRandomNum(1, 200);
var randowY = that.GetRandomNum(1, 400);
that.setData({
x: randowX,
y:randowY,
})
if(!that.data.isStop)
{
setTimeout(function () {
that.move(that);
}, 100);
}
},
//随机函数
GetRandomNum: function (Min, Max) {
var Range = Max - Min;
var Rand = Math.random();
return (Min + Math.round(Rand * Range));
},

js里面需要讲解的内容比较多

  1. x/y 用来控制菜单栏的位置,isStop停止移动
  2. 介绍一个js延迟执行事件的方法setTimeout(function () { }, 1000),逗号左边执行事件的方法,右边设置延迟多久执行事件,1000对应的是一秒
  3. GetRandomNum 这个方法是我自定义的,用于生成随机数字,计算滚动的距离
  4. 还有一个需要注意点是,要事件监听更新数据的时候,this对象在程序中随时会改变,此时需要执行 var that = this;把this对象传递给that就可以解决上面遇见的问题

三、wxss样式

.moveArea {
height: 400px;
width:200px;
background: red;
margin: 10px;
}
.moveView {
height: 100rpx;
width: 100rpx;
line-height: 100rpx;
background: blue;
border-radius: 50%;
text-align: center;
margin: 10rpx;
}

今天讲解的样式有一下几个

如何把图形从方形变成圆形?

border-radius 这是今天的主角,把他的值设置成50%,就由方形变成圆形了,这个属性是设置圆角的,设置10%,是有一点圆角的方形

设置内容垂直居中方法

这是代码君的一个小窍门,把height和line-height设置成一样,他自动会垂直居中

总结

今天讲解的是可移动的菜单,本身实现是没什么难度的,我又引入了几个知识点,一个是推迟事件函数的使用还有就是几个css样式设置的小窍门,读者回去认真记住使用规则,后面我们陆续会用上,好啦,今天的课程就到这~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript访问样式表代码
Oct 15 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 Javascript
各浏览器对document.getElementById等方法的实现差异解析
Dec 05 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
Jun 16 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
Sep 21 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
Oct 26 Javascript
JavaScript实现瀑布流图片效果
Jun 30 Javascript
详解angularjs获取元素以及angular.element()用法
Jul 25 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
Aug 03 Javascript
JS Testing Properties 判断属性是否在对象里的方法
Oct 01 Javascript
详解Vue取消eslint语法限制
Aug 04 Javascript
解决vue props 拿不到值的问题
Sep 11 Javascript
webpack自动打包和热更新的实现方法
Jun 24 #Javascript
Promise扫盲贴
Jun 24 #Javascript
深入学习js函数的隐式参数 arguments 和 this
Jun 24 #Javascript
前端天气插件tpwidget使用方法详解
Jun 24 #Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
Jun 24 #Javascript
JS实现给数组对象排序的方法分析
Jun 24 #Javascript
新手快速入门JavaScript装饰者模式与AOP
Jun 24 #Javascript
You might like
星际RPG字典
2020/03/04 星际争霸
php 阴历-农历-转换类代码
2012/01/16 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
YII框架http缓存操作示例
2019/04/29 PHP
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
2015/04/07 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
Python标准库之Sys模块使用详解
2015/05/23 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
python3爬虫怎样构建请求header
2018/12/23 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
python实现FTP循环上传文件
2020/03/20 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
python 写一个水果忍者游戏
2021/01/13 Python
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
文化活动实施方案
2014/03/28 职场文书
经营管理策划方案
2014/05/22 职场文书
村道德模范事迹材料
2014/08/28 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
继承权公证书范本
2015/01/23 职场文书
教师师德承诺书2016
2016/03/25 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers