微信小程序滚动动画,点击事件及评分星星制作!
前言
小程序上线刷爆了朋友圈,但是最近渐渐消沉了,很少有动静!最近公司项目需要,体验了一下微信小程序,制作了几个功能,布局感觉很简单,但是交互和动画等写起来确实很费劲,主要是因为他不能操作DOM,只能修改数据!下面介绍一下我制作小程序完成的几个小的功能,希望能够给开发小程序的朋友带来帮助!
滚动动画制作
小程序制作回到顶部,或者滚动到某个位置,很简单,也有很多实现方法! 例如:
、动态改变它的 scroll-top 、scroll-into-view 滚动到某个ID的位置
但是,问题来了,这个效果是瞬间到底顶部或者某个位置,并没有动画效果。这个动画如何制作呢?查看了动画API wx.createAnimation(OBJECT) 貌似并不能实现这个效果!
那么怎么办呢?
我是用setInterval不断改变scroll-top来实现这个效果的!
WXML页面绑定scroll-top
scroll-top="{{scrollTo}}"
js的data中设置初始化scrollTo:0
核心代码如下:
if(typeof setdsq != null){
clearInterval(setdsq);
}
let scrollTops=num*ONEHEIGHT,oldTops=_this.data.scrollTo;
if(oldTops<scrollTops){//初始化滚动高度和目前滚动高度做对比
var scrollnum=(scrollTops-oldTops)/;//每50毫秒增加减少的数量
var setdsq=setInterval(function(){
oldTops+=scrollnum;
if(oldTops<scrollTops){
_this.setData({scrollTo:oldTops})
}else{
clearInterval(setdsq)
}
},)
}else{
var scrollnum=(oldTops-scrollTops)/;
var setdsq=setInterval(function(){
oldTops-=scrollnum;
if(scrollTops<oldTops){
_this.setData({scrollTo:oldTops})
}else{
clearInterval(setdsq)
}
},)
}
解释 num 是第几个菜单,通过currentTarget.dataset获取,ONEHEIGHT是一个常量,表示菜单内容的高度。
单击添加移除class
我们一般通过如下方式做
WXML:
<button class="{{select == 0 ? 'gray':'red'}}">按钮<button>
js:
//只需要动态变更select既可以改变class渲染
var _this= this;
_this.setData({
select: !that.data.select;
});
点击改变图标(每个菜单图标不一致)
js设置如下:
data: {
currentIndex:,//默认index
navScr:[HX_ON,ZX_OFF,SQ_OFF,WY_OFF,QY_OFF,BL_OFF],//HX_ON等都是定义的图片路径常量,在配置文件中
iconOn:[HX_ON,ZX_ON,SQ_ON,WY_ON,QY_ON,BL_ON],//HX_ON等都是定义的图片路径常量,在配置文件中
iconOff:[HX_OFF,ZX_OFF,SQ_OFF,WY_OFF,QY_OFF,BL_OFF],//HX_OFF等都是定义的图片路径常量,在配置文件中
navClass:["navLihover","","","","",""]
},
核心函数部分代码如下:
let _this = this;
let _arr= [], _class=[];
for(let i = ; i < _this.data.iconOn.length ; i++){
if( i == num ){//num代码当前选中的导航的index,,前台页面设置,js中可以通过event.currentTarget.dataset获得
_arr[i] = _this.data.iconOn[i];
_class[i] = 'navLihover';
}else{
_arr[i] = _this.data.iconOff[i];
_class[i] = '';
}
}
_this.setData({
navScr:_arr,
navClass:_class,
currentIndex:num
});
评分星星制作
初始化的时候定义几个常量
const LENGTH=;
const CLS_ON="../../images/star/on.png";
const CLS_OFF="../../images/star/off.png";
const CLS_HALF="../../images/star/half.png";
评分判断
//评分判断
let starArray=[];
let score =Math.floor(lpData.data.comment.sRate*)/; //lpData.data.comment.sRate表示获取当前评分,例如:4.65等
let hasDecimal =score % !==;
let integer =Math.floor(score);
for (let i=;i<integer;i++){
starArray.push(CLS_ON)
}
if(hasDecimal){
starArray.push(CLS_HALF)
}
while(starArray.length<LENGTH){
starArray.push(CLS_OFF)
}
//左侧导航数组
_this.setData({
star:starArray
})
循环star数组就可以出来星星。
案例效果图
微信小程序滚动动画,点击事件及评分星星制作!的更多相关文章
- 微信小程序 template添加点击事件
介绍template是微信小程序提供的模板,可以在模板中定义代码片段,然后在不同的地方调用. 简单使用定义template因为项目中可能会需要到不止一个template,所以最好新建一个文件夹来存放t ...
- .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转
.net mvc 站点自带简易SSL加密传输 因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...
- 微信小程序滚动tab的实现
微信小程序滚动tab的实现 1.目的:为了解决滚动版本的tab,以及实现虹吸效果. 2.方案:自己动手写了一个Demo,用于测试实现如上的效果.其代码有做参考,在这里先声明.具体的参照如下:重庆大学二 ...
- 微信小程序循环列表点击每一个单独添加动画
首先,咱们看一下微信小程序动画怎么实现,我首先想到的是anime.js,但是引入之后用不了,微信小程序内的css也无法做到循环的动态,我就去找官方文档看看有没有相应的方法,哎,还真有 点击这里查看 微 ...
- 微信小程序-滚动Tab选项卡
前言:今天呢 给大家详细讲解一下滚动Tab选项卡:左右可滑动切换的效果,希望对大家做项目时候有用! 以前也遇到过这个,但是没有做记录.转载来源于:https://www.jianshu.com/p/9 ...
- 微信小程序滚动Tab选项卡:左右可滑动切换
最终效果如上.问题: 1.tab标题总共8个,所以一屏无法全部显示. 2.tab内容区左右滑动切换时,tab标题随即做标记(active). 3.当active的标题不在当前屏显示时,要使其能显示到当 ...
- 微信小程序学习笔记二 数据绑定 + 事件绑定
微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...
- 第一个微信小程序(实现点击一个按钮弹出toast)
今天根据网上的教程搭建了微信小程序的环境,然后看文档做了一个简单的小应用. 项目的目录是这个样子的: app.js.app.json.app.wxss是全局文件,必不可少的文件.定义在app.wxss ...
- 微信小程序的动画效果
前言 由于公司计划有变,所以从H5页面改成去小程序写.所以在着手开发小程序.本人也不是什么前端高手,只是一名写后端偶尔写写前端的渣渣.请前端大神们勿喷. 一.什么是微信小程序? 小程序在我的理解中只是 ...
随机推荐
- BZOJ 3907: 网格 [Catalan数 高精度]
3907: 网格 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 402 Solved: 180[Submit][Status][Discuss] De ...
- 事务与隔离级别------《Designing Data-Intensive Applications》读书笔记10
和数据库打交道的程序员绕不开的话题就是:事务,作为一个简化访问数据库的应用程序的编程模型.通过使用事务,应用程序可以忽略某些潜在的错误场景和并发问题,由数据库负责处理它们.而并非每个应用程序都需要事务 ...
- PLECS—晶闸管-第九周
1. 单相桥式晶闸管整流电路仿真 (1)仿真电路图 (2)触发角为pi/4的手工波形图(参数设置,触发角=pi/4, 电感L = 0H) (2)模拟仿真波形图 1)参数设置:触发角=pi/4, 电感L ...
- IDEA的导包优化问题
一.现象 文件初始导包状态 package co.x.dw.function; import java.text.SimpleDateFormat; import java.util.ArrayLis ...
- 使用Docker link搭建PHP开发环境
一般我们会把nginx.php都安装在同一个容器,为了扩展方便,我们希望nginx和php分开.那么就可以使用docker link命令实现这一目的. 需要的镜像: nginx 1.12.2 php( ...
- Python基本格式化输出
什么叫格式化输出? 数据按照某种特殊的要求输出 假如输入一个整数,希望整数按照十六进制,八进制输出,如果输入一个小数,希望小数保留后面2位数然后输出,或者以科学计数法的方式来输出小数.字符串的输出希望 ...
- WinServer2012 R2忘记密码的解决方案+远程连接另一种莫名其妙故障
http://www.cnblogs.com/dunitian/p/4822808.html#iis 之前朋友有问道我WinServer2003密码破解的事情,基本上密码忘记了都是进PE用密码清除的工 ...
- selenium自动化测试——常见的八种元素定位方法
selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...
- 将Tomcat配置到你的mac电脑上,命令行启动tomcat
1.下载tomcat7文件 2.编辑打开.bash_profile vim .bash_profile 3.在该文件最后面添加(CATALINA_HOME为tomcat解压目录) CATALINA_H ...
- UVA - 11636 Hello World! (贪心)
思路:复制次数最少并且可以部分复制,那么贪心地让当前尽量多的复制,如果最后一次复制会超过n,那就部分复制.即满足并且x尽量小. AC代码 #include <stdio.h> const ...
