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


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 相关文章推荐
入门基础学习 ExtJS笔记(一)
Nov 11 Javascript
Notify - 基于jquery的消息通知插件
Oct 18 Javascript
jquery封装的对话框简单实现
Jul 21 Javascript
JS匀速运动演示示例代码
Nov 26 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
Mar 04 Javascript
js中对函数设置默认参数值的3种方法
Oct 23 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
Mar 01 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
Jan 10 Javascript
JS实现将链接生成二维码并转为图片的方法
Mar 17 Javascript
详解vue-cli 2.0配置文件(小结)
Jan 14 Javascript
vue中多个倒计时实现代码实例
Mar 27 Javascript
p5.js码绘“跳动的小正方形”的实现代码
Oct 22 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
PHP分页显示制作详细讲解
2006/10/09 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
js对象的比较
2011/02/26 Javascript
dreamweaver 安装Jquery智能提示
2011/04/02 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
2019/06/12 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
客服实习的个人自我鉴定
2013/10/20 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
公开致歉信
2019/06/24 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS