uniapp 内使用 nvue 做原生标题

本贴最后更新于 1903 天前,其中的信息可能已经沧海桑田

nvue 页面只能使用 vue 的生命周期,uniapp 生命周期 api 支持部分,css 样式只支持 flex,很多 css 样式不支持

<template> <div class="controls-top" ref="controlsTop"> <div class="title"><text class="text">{{title}}</text></div> <div class="fanhui" @tap="back"><text class="ios-icon">&#xe60a;</text></div> <div class="top-right1"> <div class="power-view"> <div class="power-box"> <div class="power-header"></div> <div class="power-body"><div class="power-level" :style="{ width: `${16 * level}px`, backgroundColor: '#fff' }"></div></div> </div> </div> </div> <div class="top-right2"> <text class="ios-sm-title">{{nowTime}}</text> </div> </div> </template> <script> const animation = weex.requireModule('animation'); const modal = weex.requireModule('modal'); export default { data() { return { level:0, nowTime:"00:00", title:'', timer:null, platform:null } }, beforeCreate() { // #ifdef APP-PLUS-NVUE var domModule = weex.requireModule('dom'); domModule.addRule('fontFace', { fontFamily: 'texticons', src: "url('../../../static/text-icon.ttf')" }); // #endif }, created(){ uni.getSystemInfo({ success: (e) => { // #ifndef MP this.platform = e.platform // #endif } }) }, mounted() { this.getLevel() this.timer = setInterval(()=>{ this.nowTime = this.getNowTime() },1000) uni.$on("videoTitileShow",()=>{ this.nowTime = this.getNowTime() this.animateControls(0,this.$refs.controlsTop) }) uni.$on("videoTitileHide",()=>{ this.animateControls(-40,this.$refs.controlsTop) }) uni.$on("videoTitileChange",(title)=>{ this.title = title }) }, destroyed() { uni.$off("videoTitileShow") uni.$off("videoTitileHide") uni.$off("videoTitileChange") clearInterval(this.timer) }, methods: { getLevel(){ let promise = new Promise((resolve,reject)=>{ //#ifdef APP-PLUS-NVUE if(this.platform == 'android'){ //注意,安卓需要配置下manifest.json文件,打开后,进入模块权限配置,在右侧的Android权限设置里勾选上android.permission.BATTERY_STATS var main = plus.android.runtimeMainActivity(); var Intent = plus.android.importClass('android.content.Intent'); var recevier = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', { onReceive: function(context, intent) { var action = intent.getAction(); if (action == Intent.ACTION_BATTERY_CHANGED) { let level = intent.getIntExtra("level", 0); //电量 var voltage = intent.getIntExtra("voltage", 0); //电池电压 var temperature = intent.getIntExtra("temperature", 0); //电池温度 resolve(level/100) } } }); var IntentFilter = plus.android.importClass('android.content.IntentFilter'); var filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); main.registerReceiver(recevier, filter); }else if(this.platform == 'ios'){ var UIDevice = plus.ios.import("UIDevice"); var dev = UIDevice.currentDevice(); if (!dev.isBatteryMonitoringEnabled()) { dev.setBatteryMonitoringEnabled(true); } let level =dev.batteryLevel(); resolve(level) } //#endif //#ifdef MP-WEIXIN wx.getBatteryInfo({ success: function(e) { resolve(e.level) } }) //#endif }) promise.then(res=>{ this.level = res }) }, getNowTime(){ var now = new Date(); var hh = now.getHours(); //时 if(hh<10) hh = "0" + hh; var mm = now.getMinutes(); //分 if(mm<10) mm = "0" + mm; return `${hh}:${mm}`; }, back(){ this.animateControls(-40,this.$refs.controlsTop) uni.$emit("exitFullscreen") }, animateControls(distance,el){ animation.transition(el, { styles: { transform: `translate(0px, ${distance}px)`, }, duration: 350, //ms timingFunction: 'ease', delay: 0 //ms }, () => { } ) } } }; </script> <style> .controls-top { /* width: 750upx; */ /* #ifndef APP-PLUS-NVUE */ display: flex; /* #endif */ position: relative; background-image: linear-gradient(to top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.8)); height: 40px; transform: translateY(-40px); align-items: center; justify-content: space-between; text-align: left; padding: 0 40px 0 40px; } .ios-icon { font-size: 18px; color: #fff; font-family: texticons; } .title { /* width: 750upx; */ height: 40px; /* #ifndef APP-PLUS-NVUE */ display: flex; /* #endif */ position: absolute; left: 40px; right: 80px; top: 0px; justify-content: center; text-align: left; align-items: flex-start; /* background-color: #007aff; */ padding: 0 10px 0 10px; } .text { color: #fff; font-size: 14px; } .fanhui { /* #ifndef APP-PLUS-NVUE */ display: flex; /* #endif */ width: 40px; height: 40px; position: absolute; top: 0; left: 0; justify-content: center; align-items: center; } .top-right1 { /* #ifndef APP-PLUS-NVUE */ display: flex; /* #endif */ align-items: center; font-size: 12px; color: #fff; position: absolute; top: 14px; right: 2px; width: 40px; } .top-right2 { /* #ifndef APP-PLUS-NVUE */ display: flex; /* #endif */ align-items: center; font-size: 12px; color: #fff; position: absolute; top: 12px; right:38px; width: 40px; } .power-view { /* #ifndef APP-PLUS-NVUE */ display: flex; /* #endif */ align-items: center; } .power-box { flex-direction: row; align-items: center; } .power-header { height: 4px; width: 2px; background-color: #fff; } .power-body { height: 9px; width: 20px; border-width: 1px; border-color: #fff; padding: 1px; flex-direction: row; justify-content: flex-end; } .power-level { height: 5px; } .ios-sm-title{ font-size: 10px; color: #fff; } </style>

image.png

pages.josn 配置 nvue
image.png

vue 页面里获取 nvue 组件,使用

this.videoTitleNvue = uni.getSubNVueById('title'); this.videoTitleNvue.setStyle({ top: 44 + uni.getSystemInfoSync().statusBarHeight + 'px', left: '0px', width: '100%', height: '40px' }); this.videoTitleNvue.show('auto', 0, function() { // 打开后进行一些操作... // });

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
gjTool
欢迎博客互链 https://www.gjtool.cn/ 武汉

推荐标签 标签

  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    53 引用 • 40 回帖
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 76 回帖
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 759 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    116 引用 • 54 回帖 • 3 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    88 引用 • 122 回帖 • 622 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 1 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 14 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 653 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 3 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 258 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖 • 2 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 318 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 442 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    226 引用 • 476 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 158 关注
  • Word
    13 引用 • 40 回帖
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 457 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • OneDrive
    2 引用 • 1 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • V2Ray
    1 引用 • 15 回帖
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 495 关注