前言


小程序上线刷爆了朋友圈,但是最近渐渐消沉了,很少有动静!最近公司项目需要,体验了一下微信小程序,制作了几个功能,布局感觉很简单,但是交互和动画等写起来确实很费劲,主要是因为他不能操作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数组就可以出来星星。

案例效果图


微信小程序滚动动画,点击事件及评分星星制作!的更多相关文章

  1. 微信小程序 template添加点击事件

    介绍template是微信小程序提供的模板,可以在模板中定义代码片段,然后在不同的地方调用. 简单使用定义template因为项目中可能会需要到不止一个template,所以最好新建一个文件夹来存放t ...

  2. .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 ...

  3. 微信小程序滚动tab的实现

    微信小程序滚动tab的实现 1.目的:为了解决滚动版本的tab,以及实现虹吸效果. 2.方案:自己动手写了一个Demo,用于测试实现如上的效果.其代码有做参考,在这里先声明.具体的参照如下:重庆大学二 ...

  4. 微信小程序循环列表点击每一个单独添加动画

    首先,咱们看一下微信小程序动画怎么实现,我首先想到的是anime.js,但是引入之后用不了,微信小程序内的css也无法做到循环的动态,我就去找官方文档看看有没有相应的方法,哎,还真有 点击这里查看 微 ...

  5. 微信小程序-滚动Tab选项卡

    前言:今天呢 给大家详细讲解一下滚动Tab选项卡:左右可滑动切换的效果,希望对大家做项目时候有用! 以前也遇到过这个,但是没有做记录.转载来源于:https://www.jianshu.com/p/9 ...

  6. 微信小程序滚动Tab选项卡:左右可滑动切换

    最终效果如上.问题: 1.tab标题总共8个,所以一屏无法全部显示. 2.tab内容区左右滑动切换时,tab标题随即做标记(active). 3.当active的标题不在当前屏显示时,要使其能显示到当 ...

  7. 微信小程序学习笔记二 数据绑定 + 事件绑定

    微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...

  8. 第一个微信小程序(实现点击一个按钮弹出toast)

    今天根据网上的教程搭建了微信小程序的环境,然后看文档做了一个简单的小应用. 项目的目录是这个样子的: app.js.app.json.app.wxss是全局文件,必不可少的文件.定义在app.wxss ...

  9. 微信小程序的动画效果

    前言 由于公司计划有变,所以从H5页面改成去小程序写.所以在着手开发小程序.本人也不是什么前端高手,只是一名写后端偶尔写写前端的渣渣.请前端大神们勿喷. 一.什么是微信小程序? 小程序在我的理解中只是 ...

随机推荐

  1. BZOJ 3907: 网格 [Catalan数 高精度]

    3907: 网格 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 402  Solved: 180[Submit][Status][Discuss] De ...

  2. 事务与隔离级别------《Designing Data-Intensive Applications》读书笔记10

    和数据库打交道的程序员绕不开的话题就是:事务,作为一个简化访问数据库的应用程序的编程模型.通过使用事务,应用程序可以忽略某些潜在的错误场景和并发问题,由数据库负责处理它们.而并非每个应用程序都需要事务 ...

  3. PLECS—晶闸管-第九周

    1. 单相桥式晶闸管整流电路仿真 (1)仿真电路图 (2)触发角为pi/4的手工波形图(参数设置,触发角=pi/4, 电感L = 0H) (2)模拟仿真波形图 1)参数设置:触发角=pi/4, 电感L ...

  4. IDEA的导包优化问题

    一.现象 文件初始导包状态 package co.x.dw.function; import java.text.SimpleDateFormat; import java.util.ArrayLis ...

  5. 使用Docker link搭建PHP开发环境

    一般我们会把nginx.php都安装在同一个容器,为了扩展方便,我们希望nginx和php分开.那么就可以使用docker link命令实现这一目的. 需要的镜像: nginx 1.12.2 php( ...

  6. Python基本格式化输出

    什么叫格式化输出? 数据按照某种特殊的要求输出 假如输入一个整数,希望整数按照十六进制,八进制输出,如果输入一个小数,希望小数保留后面2位数然后输出,或者以科学计数法的方式来输出小数.字符串的输出希望 ...

  7. WinServer2012 R2忘记密码的解决方案+远程连接另一种莫名其妙故障

    http://www.cnblogs.com/dunitian/p/4822808.html#iis 之前朋友有问道我WinServer2003密码破解的事情,基本上密码忘记了都是进PE用密码清除的工 ...

  8. selenium自动化测试——常见的八种元素定位方法

    selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...

  9. 将Tomcat配置到你的mac电脑上,命令行启动tomcat

    1.下载tomcat7文件 2.编辑打开.bash_profile vim .bash_profile 3.在该文件最后面添加(CATALINA_HOME为tomcat解压目录) CATALINA_H ...

  10. UVA - 11636 Hello World! (贪心)

    思路:复制次数最少并且可以部分复制,那么贪心地让当前尽量多的复制,如果最后一次复制会超过n,那就部分复制.即满足并且x尽量小. AC代码 #include <stdio.h> const ...