Nvue/Weex
Nvue/Weex
使用Uniapp做了一个App,感觉性能不是很好,了解过Uniapp的Nvue,就想做一个纯Nvue项目,其实基本就是做一个Weex项目,不得不说坑是真的多,但是渲染性能真的是没得比
本项目开发环境为 UNIAPP 的 纯NVUE 项目,与WEEX有不同之处
https://github.com/WindrunnerMax/SW
一、 CSS选择器
1. 简单类选择器
/** Weex仅支持简单类选择器,不支持标签选择器以及子选择器 **/
/* 支持 */
.test{
padding: 10px;
font-size: 15px;
background-color: #F8F8F8;
}
.test , .test2{
padding: 10px;
font-size: 15px;
background-color: #F8F8F8;
}
/* 不支持 */
a{
padding: 10px;
font-size: 15px;
background-color: #F8F8F8;
}
.test .test2{
padding: 10px;
font-size: 15px;
background-color: #F8F8F8;
}
二、通用样式
1. flex 布局
- 每个节点自动设置为flex,无需再次显示声明,且flex为唯一布局方式
- flex默认方向为纵向,与Web默认不同,需手动声明为横向
flex-direction: row; - 使用
align-items: center;justify-content: center;/* flex为横向为例 */进行居中 - 建议阅读http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
- 使用
flex: 1;可以将父容器填充满
2. text 文字
- 显示文字必须在
<text></text>中使用 color: #aaa;font-size: 15px;等样式仅在<text></text>中生效- color、font-size等属性不支持从父节点继承,必须使用class或者内联声明
- text标签中内联 margin、padding 样式失效,需使用class声明
3. page 页面
Weex不支持page选择器,也没有page样式,page.json中设置backgroundColor也无效
只能弯道超车设置整体页面颜色,但是效果并不是特别好
注意这是Uniapp的Nvue方式
此外,直接在 .page 设置 flex:1 , 并将 class="page" 赋予根节点,可以将页面扩充至满屏,但也会导致页面无法滚动
官方机器人给予了更好的解决方案
此外一个坑,Nvue不支持全局组件,每个页面需要的组件必须在页面单独引入
/** 首先声明 .page 类 **/
.page{
font-family: Arial,, 'STHeiti STXihei', 'Microsoft YaHei', Tohoma, sans-serif;
padding: 10px;
font-size: 15px;
background-color: #F8F8F8;
}
<template>
<view>
<view class="page" ref="box"> <!-- 声明page与容器块,注意ref -->
<!-- 页面内容 -->
</view>
<view style="background-color: #F8F8F8;" :style="pageFill"></view> <!-- 填充块 -->
</view>
</template>
// 获取页面已使用高度,将填充块高度设置为屏幕高度-已使用容器高度
const app = getApp()
const dom = weex.requireModule('dom');
export default {
data() {
return {
pageFill: {
width: "750rpx",
height: "0rpx"
}
}
},
onReady: function() {
this.resize(); // 调用resize调整填充块大小
var that = this;
// uni.requests 中 success 可以调用 that.$nextTick(() => { that.resize() })
},
methods: {
resize: function() {
const that = this;
const result = dom.getComponentRect(this.$refs.box, option => {
that.pageFill.height = (uni.getSystemInfoSync().windowHeight - option.size.height) + 'px';
console.log(uni.getSystemInfoSync().windowHeight, option.size.height);
})
},
}
}
<!-- 使用flex:1;的情况,可以设置全屏页面,但这样页面将无法滚动 -->
<!-- 页面中 -->
<template>
<view class="page">
<!-- 节点内容 -->
</view>
</template>
<!-- App.vue -->
<style>
.page{
font-family: Arial, Helvetica, 'STHeiti STXihei', 'Microsoft YaHei', Tohoma, sans-serif;
padding: 10px;
font-size: 15px;
flex: 1;
background-color: #F8F8F8;
}
</style>
<!-- 官方的方法,偶然看到官方群机器人的回复 -->
<template>
<view class="page" style="flex:1;">
<scroll-view scroll-y="true">
<view>
<!-- 页面内容 -->
</view>
</scroll-view>
</view>
</template>
<!-- 封装个组件 -->
<template name="scrollpage">
<view class="scrollPage">
<scroll-view scroll-y="true">
<view class="scrollRootView">
<slot></slot>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
name: "scrollpage",
data() {
return {};
}
}
</script>
<style>
.scrollPage{
font-family: Arial, Helvetica, 'STHeiti STXihei', 'Microsoft YaHei', Tohoma, sans-serif;
font-size: 15px;
background-color: #F8F8F8;
flex: 1;
}
.scrollRootView{
padding: 10px;
}
</style>
4. width 宽度
- Weex 针对长度单位,支持 px 和 wx 作为长度单位,不支持相对单位(em,rem,pt,%)
- Uniapp编译模式,rpx是以750宽屏幕为基准的动态单位,px则是固定像素单位
- 750rpx是Uniapp中Nvue的满屏基准,是需要编译模式为Uniapp,区别于Weex编译模式
- 除了固定大小的图片等,直接使用 flex 就可以完成布局,注意使用
flex:1;
5. border 边框
/** border不支持简写 **/
/* 支持 */
.border{
border-style: solid;
border-color: #EEEEEE;
border-bottom-width: 1px;
}
/* 不支持 */
.border{
border: 1px solid #eee;
}
6. display 属性
- 不支持 display 属性
- 不能使用 display:none; 来控制元素的显隐性
- v-show 条件渲染是不生效的,使用 v-if 代替
7. z-index 层级
- 不支持 z-index 进行层级关系的设定,但是靠后的元素层级更高,因此,可以将层级高的元素放在靠后的位置
8. background 背景
/** background不支持简写,简写在浏览器上颜色能够正常渲染,但是在手机端,颜色无法正常渲染 **/
/* 支持 */
.backgroundT{
background-color: #F8F8F8;
}
/* 不支持 */
.backgroundT{
background: #F8F8F8;
}
9. padding、margin 边距
/* 支持 */
padding: 1px;
padding: 1px 2px 3px 4px; /* class */
margin: 1px;
margin: 1px 2px 3px 4px; /* class */
三、字体图标
1. 阿里矢量图标库
/** 以阿里矢量图标库iconfont为例引入字体图标 **/
/** 只需要在首页引入一次即可全部页面使用 **/
/* App.vue */
.iconfont{
font-family: iconfont;
}
// 应用首页引入
const dom = weex.requireModule('dom');
dom.addRule('fontFace', {
'fontFamily': 'iconfont',
'src': "url('https://at.alicdn.com/t/font_1582902_mwrjy69s3lm.ttf')"
})
<!-- 显示图标 -->
<text class='iconfont' style="color: #FF6347;"></text>
四、内部组件
1. image
- width, height 和 src必须被提供,否则图片无法渲染。
- resize属性决定图片缩放,允许值cover / contain / stretch,默认stretch
2. webview
<web />是weex支持的webview组件,加载完成后显示HTML<web-view />是uniapp支持的webview组件,webview-styles属性不支持- 上述组件都必须指定width, height 和 src,否则无法显示
- 可以使用
flex: 1;来设置填充满屏幕 <web />阻断了下载与打开其他应用事件
Nvue/Weex的更多相关文章
- uni-app 入门之 nvue (weex) 爬坑记
前言 uni-app 是 DCloud 出品的新一代跨端框架,可以说是目前跨端数最多的框架之一了,目前支持发布到:App(Android/iOS).H5.小程序(微信小程序/支付宝小程序/百度小程序/ ...
- uni-app中nvue (weex) 注意事项
前言 uni-app 是 DCloud 出品的新一代跨端框架,可以说是目前跨端数最多的框架之一了,目前支持发布到:App(Android/iOS).H5.小程序(微信小程序/支付宝小程序/百度小程序/ ...
- uni-app条件编译:#ifdef #ifndef #endif
语法: // #ifdef %PLATFORM% 这些代码只在该平台编译 // #endif #ifdef : if defined 仅在某个平台编译 #ifndef : if n ...
- 基于uniapp自定义Navbar+Tabbar组件「兼容H5+小程序+App端Nvue」
uni-app跨端自定义navbar+tabbar组件|沉浸式导航条|仿咸鱼凸起标签栏 在跨端项目开发中,uniapp是个不错的框架.采用vue.js和小程序语法结构,使得入门开发更容易.拥有非常丰富 ...
- ReactNative&weex&DeviceOne对比
React Native出来有一段时间了,国内的weex和deviceone是近期发布的,我可以说从2011年就开始关注快速开发的跨平台平台技术了,接触过phoneGap.数字天堂.appcan等早期 ...
- 阿里的weex框架到底是什么
title: 阿里的weex框架到底是什么 date: 2016-09-27 10:22:34 tags: vue, weex category: 技术总结 --- weex 工作原理 首先看下官方的 ...
- 第八章 交互技术,8.4 Weex 双11会场大规模应用的秒开实战和稳定性保障(作者:鬼道)
8.4 Weex 双11会场大规模应用的秒开实战和稳定性保障 前言 Native 开发的诸多亮点中,流畅体验和系统调用是最多被提及的.流畅体验体现在页面滚动/动画的流畅性,背后是更好的内存管理和更接近 ...
- weex image
weex 的image用来渲染图片, 可以使用img作为它的别名. 需要注意的是,他的长度可宽度必须指定, 不然它是不会工作的. 它没有任何的子组件. 有两个属性: src 用来指定图片的地址图片. ...
- weex scroller
今天学习了一下weex的 scroller.就简单地对其整理一下自己的学习笔记. <scroller>这个标签只能出现在列(column)上面, 只有当它自己的内容大于类似与PC父级的高度 ...
随机推荐
- TCP并发、GIL全局锁、多线程讨论
TCP实现并发 #client客户端 import socket client = socket.socket() client.connect(('127.0.0.1',8080)) while T ...
- 修改xampp中phpmyadmin用户管理
用相关软件打开位于D:/xampp/phpMyAdmin文件夹中的config.inc.php文件. 搜索$cfg['Servers'][$i]['auth_type'] = 'config'; 将其 ...
- 2019-04-18-NFV基础概念
NFV技术的起源和概念 在移动互联网时代,运营商面临内外困局.就自身而言,采用的流量增长-网络扩容-收入增长的商业模型正在失效,庞大.僵化的电信基础网络,不能够满足用户的丰富需求:就竞争对手而言,互联 ...
- 点击穿透bug · Jaywii
微信点击穿透Bug 问题描述:在移动端为了去除点击延迟引入了fast-click,然而在房贷计算器的开发中遇到了这样一个bug,用户点击了select之后,微信在弹出选择器之后会瞬间因为约300ms的 ...
- VSCode通过git上传代码
最近也是在不断学习中,接触VSCode时间不长,很多东西也是在学习,所以这里记录下VSCode通过git上传代码,以防之后忘记. 我用的的VSCode版本 起初建立仓库的时候通过命令:(这个是我网上搜 ...
- 一致性哈希算法(consistent hashing)PHP实现
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简单哈希 ...
- JavaScript中点击按钮弹出新的浏览器窗口
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.js * 作者:常轩 * 微信公众号:Worldhel ...
- 【Art】物理课题——虹吸
前言(无关闲话):在此之前,课题小组讨论了三.四次,得有10个小时了总共,但是具体还是在普及常识,那就在这里深入地讲一下. 进入正题—— 这就是虹吸的基本模型,再看一下百度的官方说法: “虹吸(sip ...
- Rxjs入门实践-各种排序算法排序过程的可视化展示
Rxjs入门实践-各种排序算法排序过程的可视化展示 这几天学习下<算法>的排序章节,具体见对排序的总结,想着做点东西,能将各种排序算法的排序过程使用Rxjs通过可视化的方式展示出来,正好练 ...
- 前端每日实战:52# 视频演示如何用纯 CSS 创作一个小球绕着圆环盘旋的动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gKxyWo 可交互视频 此视频是可 ...