微信小程序之view的flex布局(2)

微信小程序之view的flex布局(2),第1张

上一章即微信小程序之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 悬浮在顶部等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9525668.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存