上一章即微信小程序之view的flex布局(1)里,我们学习了flex容器的属性,总结一下它里面包括
(1)flex-direction 设置容器内子元素即flex-item的排列方向。
(2)flex-warp 设置容器内子元素是否换行。
(3)justify-content 设置子元素在横轴即X轴的排列位置
(4)align-items 设置子元素在Y轴的排列位置
(5)align-content 设置子元素在多个主轴线上排列的位置。
下面我们来讲讲 flex-item的属性,在flex容器中,每个子元素就是一个flex-item
如果item没有设置order,则order默认为0,如图我设置了view2,3,4的位置为3,2,1 看效果图:
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。效果看图:
因为设置了view3,4设置了left-align属性 ,所以没有均分,大家可以去掉尝试一下。
直接上图
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
该属性可能取6个值,除了auto,其他都与align-items属性完全一致。
资料地址 demo 地址
下图是小程序 小米Lite 的 Tab 切换效果:切换 Page 时,Tab 下方的指示器(红色横条)是没有滚动效果而是直接闪现到下一个 Page 的,这也是市面上小程序常见的 Tab 切换效果。
原生端 TabLayout 常见的功能就是我们的目标效果,所以 目标效果 如下:
通过了解小程序组件及技术支持,选定通过 scroll-view 、swiper 、swiper-item 、movable-area 、movable-view 配合 插槽 和 抽象节点 来实现自定义组件 tab-layout 。
具体如下图所示 :
主要实现(点击跳转查看源码)
1复制 tab-layout 组件到项目中 (点击跳转至源码 TabLayout 目录)
4在布局文件中使用 TabLayout 组件,并通过抽象节点 generic:item-tab 和 generic:item-page 分别与自定义的 Tab 和 Page 绑定
5使用自定义属性 indexAreaHeight 为 Index 及其活动区域设置高度
6使用自定义属性 tabList 设置数据源,根据数据源将自动生成对应数量的 Tab 和 Page
7按需选择可采用插槽 slot = "index" 或自定义属性 indexStyle 设置 Index 的样式
布局文件 indexwxml 中:
样式文件 indexwxss 中
布局文件 indexwxml 中
PS: 还有一个很重要的方法 onPageUpdata ,用于抽象节点 item-tab 和 item-page 通知父节点 tab-layout 刷新数据,在子控件中通过 thistriggerEvent("updata") 触发
可能出现问题:
1 当 item-page 中存在竖直滚动的 scroll-view 时出现滑动冲突该如何解决?
在 item-page 组件 attached 方法中按需为 scroll-view 设置固定高度或占满屏幕剩余位置 (点击跳转查看参考写法)
2当 item-page 或 item-tab 中调用 thissetData ( ) 之后,发现自定义属性 item 获取值为 null
出现该种情况,应在 thissetData ( ) 之后,执行 thistriggerEvent("updata") 触发 tab-layout 的 onPageUpdata 方法重新得到 item 值
3如何实现 " 懒加载 " ,即当 Tab 首次被选中时,才进行对应 Page 的数据加载?
为自定义组件 item-page 设置一个懒加载标志位暂定为 isLoadData ,通过订阅自定义属性 currentIndex ,在 currentIndex 属性变化或组件进行到 attached 生命周期时,通过判断 isLoadData 和 currentIndex 是否与 position 相等来进行数据加载并调整标志位 (点击跳转查看参考写法)
在小程序越来越普及的现状下,如何使得小程序能给用户带来更完善的显示效果和使用体验,是每一个开发者都应该力尽其责的事。鉴于本人当前对小程序和网页端的熟悉程度,该组件或许还存在很多瑕疵,如有更好的见解或建议,欢迎留言。
微信小程序 ,列表头滚动的过程中 ,view 悬浮在顶部 ,如何实现这样的一个效果呢??
//indexjs
//获取应用实例
const app = getApp()
Page({
data: {
testData: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
testData2: [1, 2, 3, 4, 5, 10],
//是否显示 悬停布局
isshow:false,
//悬浮布局的数据
toptexxt:""
},
onLoad: function () {
},
/
页面加载完成
/
onReady: function () {
},
/
页面滚动监听
/
onPageScroll: function (e) {
//consolelog(e)
let that = this
let query = wxcreateSelectorQuery()
queryselectAll("section-cell")boundingClientRect(function (res) {
consolelog(res)
let size =reslength;
let position = -1;
let topshow = -1000;//根据需求设置大小
let i=0;
//根据 top 的 大小 获取 当前距离顶部最近的view 的下标, 负数最大值 或者是0,
for(i=0;i<size;i++){0
let top = res[i]top;
if(top<=0 && top>topshow ){
topshow = top;
position=i;
}
}
consolelog("当前坐标是 position = "+position)
let isshow =false;
if (res[0]top<0){
if(position==-1) position=0;
isshow = true;
}
thatsetData({
isshow: isshow,
toptexxt: isshowthatdatatestData[position]:""
})
})exec()
},
})
<!--indexwxml-->
<view>
<view class='header'>这里是header</view>
<view hidden='{{!isshow}}'>
<view class= "section-header section-fixed" >这是section-header {{toptexxt}}</view>
</view>
<view wx:for="{{testData}}" wx:key="{{testData}}">
<view>
<view class='section-cell' id='top{{item}}'>{{item}} </view>
<view wx:for="{{testData2}}" wx:key="{{testData2}}">
<view class='section-cell2' id='child{{item}}'>{{item}}</view>
</view>
</view>
</view>
</view>
/indexwxss/
section-placeholder {
background-color: white;
}
section-fixed {
position: fixed;
top: 0;
}
header {
height: 300rpx;
width: 750rpx;
background-color: bisque;
}
section-header {
height: 80rpx;
width: 750rpx;
background-color: rebeccapurple;
}
section-cell {
width: 750rpx;
height:80rpx;
background-color: gold;
margin-top: 2rpx;
}
section-cell2 {
height: 50rpx;
width: 750rpx;
background-color: darkred;
}
效果
本文主要围绕微信小程序自定义登录页面布局及常规校验,完成登录 *** 作。
1常规登录页面布局
2表单验证 登录号码 密码非空校验提示,长度控制等常规 *** 作
3表单提交
4轮播图
5本地缓存功能
1
EChart在某些配置较低的手机上出现无法交互的情况,换成自定义控件解决了这个问题。
2
新建一个自定义组件,布局如下
wxml
根据官方文档的说法,最好使用canvas2d进行绘制。
3
js
通过SelectorQuery获取canvas对象,这里的in方法用于获取自定义组件中的节点。
node属性用于获取节点实例,即canvas对象,size用于获取节点尺寸,就是canvas的宽高。这里有一个坑,通过节点获取到的画布宽高,仅仅是画布的宽高,想要在真机上正常显示,还需要获取手机的密度,并将画布的宽高乘以密度,canvasContext同样缩放屏幕密度倍数。
pixelRatio,官方说明为像素比,应该就是开发android时,1dp等于多少px。
4
绘制柱状图,其实并不复杂,统计图的要素就那么多。
首先是标题,如果需要标题的话,那么就要在绘制标题时,就需要指定标题的样式,然后预留出标题周围需要的边距。然后可以把绘制标题的方法抽取一个单独的方法。
坐标轴,确认坐标轴原点的位置,要考虑预留出坐标轴名称的位置,预留刻度名称的位置。
当获取到数据时,绘制跟数据有关的部分,也就是刷新方法。
如果需要动态刷新,js的canvas需要把原有的画布内容清空,于是要有一个clear方法。
5
提示条canvas的要覆盖在统计图canvas上,同理要根据屏幕密度对画布进行调整。同时初始化一组跟统计图canvas同样的坐标系。
绑定屏幕点击事件bindtouchastart,点击屏幕时记录点击的位置,显示提示条。
6
当手指在屏幕上滑动时,监听事件bindtouchmove,根据滑动距离变化触发页面刷新,统计图canvas,提示条canvas根据需要,是否都需要刷新。
大致思路是这样, 源码 供参考。
第一步当然是注册账号了。
注册流程:
在微信公众平台右上角点击“立即注册”,选择账号注册类型:小程序。
按要求填写小程序账号信息,包括邮箱、密码等等,填写完后,系统会发送你一个邮件,登陆相应邮箱激活账号即可
激活后,选择好主体类型,个人就选个人,企业会需要提交一些资料。一切做好后,这就注册完成了。
使用小程序账号密码登入小程序后台。在设置里设置小程序的头像、名字、服务类目(这个一定不要乱写)等信息,提交后等待微信审核。
这样,你的小程序账号就注册好了。
第二步,生成小程序
虽然已经有了一个小程序账号,但是还没有一个真正的小程序实体,空有名字,而不知道它到底长什么样子。目前市面有很多第三方小程序开发工具,我们可以用它们来做。这里我以沃然建站平台小程序开发工具为例,给大家示范下如何制作一款自己的小程序
1选择模板首先,挑选一个你喜欢的模板,开始编辑。
2直接点击“添加新的商品”,就可以把自己的产品都上架了。如果商品较多,别忘了在商店设置里设置好商品分类。
3风格设计装修,选择喜欢的主题颜色和导航栏,也可以自定义颜色。
4添加或删除各种板块。一个小程序商城就是由各种板块组成的:轮播图、快捷按钮、滑动布局、优惠活动等等。
一个属于你自己的文章小程序就制作完成了。再点击左下角的立即发布,授权给你刚刚在微信公众平台注册的小程序账号,就一切搞定!
就是这么简单~是不是没有任何难度?以上就是微信小程序怎么制作教程了。
以上就是关于微信小程序之view的flex布局(2)全部的内容,包括:微信小程序之view的flex布局(2)、微信小程序实现 TabLayout 并带有过渡效果、微信小程序 ,列表头滚动的过程中 view 悬浮在顶部等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)