微信小程序全栈开发实践 第二章 微信小程序组件介绍及使用 -- 2.4 view组件及其重要属性,flex布局中常用的样式及样式值苹果手机多长「微信小程序全栈开发实践 第二章 微信小程序组件介绍及使用

   日期:2025-02-20    作者:3ujux 移动:http://g8akg8.riyuangf.com/mobile/quote/2887.html

view最主要的功能是布局
属性

1.1 相关属性

属性1:hover-class 指定按下去的样式类

这个属性指定按下去的类样式,让容器有一个单击效果
当hover-class="none"时,或者没有设置这个属性时,就没有单击态的效果。
单击、再松开手指之后,容器组件恢复之前的状态。

 

在这里插入图片描述

hover-class 这个属性名称有一定的迷惑性
在HTML开发中,mousehover事件指的是鼠标悬停事件,hover有悬停的意思,mousedown才是鼠标按下去的事件。


属性2:hover-stop-propagation 组织父节点出现单击态
默认为false,不阻止
在这里插入图片描述

hover-stop-propagation="{{false}}"
单击子组件的时候,父组件同时也有了一个样式的改变。

hover-stop-propagation
子容器有单击态,父容器没有
虽然父容器也设置了hover-class属性
但触碰事件被子容器给阻止了。


事件三阶段

我们通过跟踪父子组件的tap事件,验证一下hover-stop-propagation属性的作用。

在示例中我们给两个view,一对父子容器同时绑定tap事件
为方便追踪,为父子容器都分配了id,父容器id是parentView,子容器是childView。

单击一次父容器,输出一次。
单击一次子容器却输出两次。

为什么会触发两次的tap事件
这是因为每个事件它都有捕捉、目标与冒泡三个阶段
在view视图容器上使用bind绑定的事件
默认会在目标与冒泡这两个阶段派发事件
子组件的冒泡事件默认会向上传递。

在这里插入图片描述
hover-stop-propagation这个属性
就是为了阻止父组件出现hover-class样式
但是它还不能阻止冒泡事件向上传递、
当我们设置这个属性以后
我们单击子组件,仍然可以看到两次输出。

在这里插入图片描述

那么我们可以
答案是肯定的,可以使用catch绑定事件函数

catch与bind的作用相同
与bind不同的是
catch会阻止事件向上冒泡。
catch是在事件的捕捉阶段监听事件的。


这样单击子容器组件的时候便不会输出两次了。

在这里插入图片描述

 
 

属性3 :hover-start-time 按住后多久出现单击态 默认为50毫秒
设置hover-start-time这个属性,是为了方便开发者控制hover-class样式出现的时机。


属性4 :hover-stay-time 手指松开以后,单击态保留多长时间,单位均是毫秒

这两个属性的设置,说明在view容器组件内部,有代码肯定做了定时
当touchstart事件发生时,开始计时,达到hover-start-time时,应用hover-class样式
当touchstart事件结束,即touchend事件发生时,开始hover-stay-time的倒计时,时间到则移除hover-class样式。


1.2 了解苹果手机网页上为什么有300毫秒的延迟

当延迟超过100毫秒的时候,用户就会感觉到界面有明显的卡顿
但是在移动设备上,特别是苹果的Safari浏览器上,我们不得不忍受300毫秒的延迟。
这是为什么呢

2007年乔布斯在iphone发布会上演示这样一个功能
对于一个Safari浏览器,在内容区快速单击
苹果会帮助我们准确定位到文章的主题内容,并将其放大。
如果用户不小心在双击时,击到了一个链接,是马上跳转呢,还是等待用户的另外一次单击。
不然没办法判断它是不是双击事件。

苹果采用的是第二种方式,所有的Safari中的链接都要延迟300毫秒
用这种方式观察用户是不是还要发出第二次单击事件
如果没有,在跳转链接,这导致苹果手机中的HTML网页里面的单击反应都有一点的迟钝。

但是在微信小程序里,没有这个问题,hover-start-time默认时间是50毫秒
只需要50毫秒,甚至更短的时间,就可以触发单击事件。
微信小程序已经迈过了300毫秒延迟的限制。

,相比HTML5
,这就是在体验上一个很大的优势。

在这里插入图片描述


1.3 hover-class的应用


在这里插入图片描述


1.4 相关问题

hover-start-time属性的值,最小可以设置为多少
设置为1毫秒,可以吗?为什么

答案是可以设置了,但是设置了也没有效果,因为在小程序当中
所有界面效果都受限于小程序本身的渲染帧率,每秒渲染60帧,每帧用时大概17毫秒
所以设置成1毫秒或者17毫秒,它的效果是一样的,没有区别。

  • justify-content 调整内容在主轴方向的排列方式
  • align-items 对齐元素在辅轴方向的对齐方式
  • align-content 对齐多行内容在辅轴方向上的排列方式
  • flex-direction
2.1 相关问题


2.1.1 在这里有一个开源的小程序组件 Painter,封装了通过JSON数据绘制海报的功能
  • 安装

    • 1.https://github.com/Kujiale-Mobile/Painter 下载组件painter
    • 2.放在components文件夹下
    • 3.在JSON 组件声明
 
  • 使用
    1.pages/index

在这里插入图片描述

在这里插入图片描述
index.wxml

 

index.js

 

index.json

 

2.components/shareBox pages/index/index.wxml index.js

isCanDraw drawPic
在这里插入图片描述

imgDraw sharePath
在这里插入图片描述

  • 效果
    在这里插入图片描述

2.1.2 或者使用weui中的wxml-to-canvas
  • 安装
    • 1.npm install --save wxml-to-canvas
    • 2.点击小程序开发工具的工具–构建npm
    • 3.JSON 组件声明
 
  • 使用
  • 在这里插入图片描述

在这里插入图片描述

index.wxml

 

index.js

 

demo.js

 

index.scss

 
  • 效果
    在这里插入图片描述

  • bug

  1. 关于 Cancvas API 错误:createImage fail: http://tmp/xxx…png
    index.js use2dCanvas
    在这里插入图片描述

index.js _drawImage

在这里插入图片描述


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号