开发必备:熟悉微信小程序组件开发

开发思路:如果只有一条数据,直接用css3关键帧动画;如果有多条数据,则在当前动画运动到一定时间的时候,将其数据替换掉,使之在视觉效果上有一个从下到上播放的状态。数组循环播放的状态是通过将当前播放元素置换到末尾实现,即通过数组元素删除插入方法将整个数组元素串成一个闭环。

本例是将跑马灯作为一个公共组件开发的,故代码展示为组件形式

目标UI:

wxml文件代码:

<view wx:if="{{lampData && lampData.length > 0}}" class="lamp-bg">
<view wx:if="{{showItem}}" class="lamp-content box box-lr box-align-center">
<image src="{{lampData[0].avatar}}" class="avatar" />
<view class="lamp-txt">{{lampData[0].desc}}</view>
</view>
</view>

wxss文件代码:

.lamp-bg {
width: 490rpx;
height: 56rpx;
background: #a50519;
border-radius: 30rpx;
overflow: hidden;
}
.lamp-content {
position: relative;
top: 60rpx;
left: 0;
animation: horseRunAnimate 2s linear infinite normal;
}
.avatar {
width: 44rpx;
height: 44rpx;
display: inline-block;
border-radius: 50%;
margin-left: 16rpx;
margin-top: 6rpx;
}
.lamp-txt {
font-size: 26rpx;
color: #fff;
display: inline;
margin-left: 6rpx;
position: relative;
top: -10rpx;
}
@keyframes horseRunAnimate {
0% {
position: relative;
top: 60rpx;
left: 0;
}
25% {
position: relative;
top: 0;
left: 0;
}
50% {
position: relative;
top: 0;
left: 0;
}
75% {
position: relative;
top: 0;
left: 0;
}
100% {
position: relative;
top: -60rpx;
left: 0;
}
}
 
json文件代码:
{
"component": true,
"usingComponents": {}
}

js代码:

let internal = '';
Component({
options: {
multipleSlots: true
},
properties: {
lampData: {
type: Array,
value: [{ avatar: '', text: 'hhhh' }, { avatar: '', desc: 'aaaa' }],
observer() {
this.startAnimate();
}
}
},
data: {
showItem: true
},
attached() {
this.setItemStatus();
},
pageLifetimes: { 
show() {
this.setData({
showItem: true
});
this.startAnimate();
},
hide() {
clearInterval(internal); // 组件所在页面隐藏时清除setInterval,是为了解决页面跳转后返回时setInterval带来的动画时差,在页面上bug提现为:两条数据更替时有跳动现象或者数据渲染延迟
this.setData({
showItem: false
});
}
},
methods: {
setItemStatus() {
if (this.data.lampData.length > 1) {
setTimeout(() => {
this.setData({
showItem: false
});
}, 1800); // 添加showItem属性值是为了解决两条数据更替是页面延迟渲染的问题                                                  
}
},
startAnimate() {
const initArr = this.data.lampData;
if (initArr.length > 1) { // 轮播总数大于1时,才执行数组首位删除并插入末尾操作
internal = setInterval(() => {
const firstEle = initArr[0];
initArr.shift();
initArr.push(firstEle);
this.setData({
lampData: initArr,
showItem: true
});
}, 2000);
}
}
}
});
 
引用该组件wxml文件代码片段:
<view class="horse-run-lamp">
<horserunlamp lampData="{{pageData.success_users}}"/>
</view>
 
引用该组件json文件代码片段:
{
"navigationBarTitleText": "test页面",
"usingComponents": {
"horserunlamp": "../../../../components/HoseRunLamp/index"
}
}

微信小程序动态数据跑马灯组件编写的更多相关文章

  1. 微信小程序动态生成保存二维码

    起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...

  2. 微信小程序请求数据

    微信小程序请求数据,在页面展示,可以在onLoad生命周期中进行请求. 1.新建目录http,新建文件http.js 2.在js文件中暴露需要使用的变量 var baseUrl = 'http://1 ...

  3. 微信小程序之数据缓存

    关于缓存,举个示例,假定我不是通过微信授权登录的方式,小程序又是如何识别我登录后的身份呢???效果图: 这个功能我是通过缓存实现的. 关键核心代码如下: wx.setStorage({ key: 'u ...

  4. 微信小程序开放数据解密 AES-128-CBC 解密(C#版本)

    最近在开发小程序,需要跟微信服务端交互,微信敏感数据都有加密返回,需要在服务端接收进行解密后再返回给客户端小程序,今天就通过C# 进行数据的解密,官方下载下来是Node.C++.php等,就是没有C# ...

  5. 微信小程序——动态修改页面数据(和样式)及参数传递

    1.1.1动态修改页面数据 在小程序中我们经常要动态渲染数据,对于新手而言我们常常遇到修改的数据在控制台显示和页面显示不一致,因为我们用“=”修改数据的,这种是可以修改,但无法改变页面的状态的,还会造 ...

  6. 微信小程序基础之试图控件View、ScrollView、Swiper

    今天写一篇关于微信小程序视图控件的文章,主要是介绍界面的搭建和部分操作js交互功能的介绍,转载请注明出处,谢谢~ 首先显示首页结构.创建三个navigator,用来跳转页面: <!--index ...

  7. 微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示

    一.前言 项目中遇到的评分相关的需求其实还挺多.之前也写过网页中关于评分功能实现的文档.这次,是基于微信小程序开发而提炼出一个简单方便使用的方法,网页开发中同样可用.这次使用的还是字体,主要是字体这个 ...

  8. 20171018 微信小程序客户端数据和服务器交互

    -- 时常在想,怎么样才能把知识写的清晰,其实是我理解的不够清晰 微信小程序其实是一个客户端页面,也是需要和服务器交互才能体现数据. 1 --服务器搭建Web API :MVC4 中的一个模板, 如下 ...

  9. 【微信小程序】数据与界面UI不同步,不能直接操作Page.data

    问题:数据层与UI不同步 微信小程序也采用UI绑定数据源的形式,根据以前做WPF的经验,直觉上认为修改了数据层(Page.data)后,UI会自动更新,然而实验发现数据层修改后UI层未修改,导致数据层 ...

随机推荐

  1. CRM项目之stark组件(1)

    admin组件 admin组件的简单使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py ...

  2. kafka的Java客户端示例代码(kafka_2.12-0.10.2.1)

    使用0.9开始增加的KafkaProducer和KafkaConsumer. Pom.xml <project xmlns="http://maven.apache.org/POM/4 ...

  3. A - Divisors POJ - 2992 (组合数C的因子数)数学—大数

    题意:就是求组合数C的因子的个数! 先说一下自己THL的算法,先把组合数求出来,然后将这个大数分解,得到各个素数的个数,再利用公式!用最快的大数分解算法 分析一下时间复杂度!   n1/4但是分析一下 ...

  4. java FTP各种操作

    package com.ailk.qw.util; import it.sauronsoftware.ftp4j.*;import org.slf4j.Logger;import org.slf4j. ...

  5. expdp 高版本导入到低版本

    低版本 往 高版本 导入,导出的时候不用加version : 高版本往低版本的时候 需要加 version expdp version (往低版本的时候 需要加 version 版本号是 impdp ...

  6. Echo团队Alpha冲刺随笔 - 第三天

    项目冲刺情况 进展 完成了三分一左右,前端整体页面框架已有,后端也在稳步推进 问题 今天问题较少,主要还是出在对于框架的掌握上 心得 继续加油! 今日会议内容 黄少勇 今日进展 实现社区公告,个人信息 ...

  7. luogu P1439 【模板】最长公共子序列(LCS)

    题目qwq (第一道蓝题) 先把第一个序列每个数出现的顺序记下来(数字本身不用记), 然后第二个序列的每个数都对照它的顺序,这样只要得到一个升序的序列就行了qwq 如果遇到出现顺序在前面的数,就用二分 ...

  8. Android 新加几个开源项目

    http://www.androidviews.net  http://www.theultimateandroidlibrary.com test 最低版本: 简介: 地址: 效果图: test A ...

  9. Volume is already attached by pod default/nginx-deployment-86dfb99868-szpkd. Status Running

    1.部署WordPress - mysql ,想扩容,修改deployment,结果报错: MountVolume.SetUp failed for volume "pvc-e" ...

  10. Skyline从5.1升级版本到6.5的常见接口变化问题

    1.原来Route对象升级成Presentation对象后,激活方法的变化: 原来5.1版本示例代码: function flyto(thisa) { var thisid = thisa.id; v ...