当前位置: 首页 > wzjs >正文

多语种企业网站建设海口网红景点

多语种企业网站建设,海口网红景点,十大软件免费下载安装手机版,如何去除网站外链往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录) ✏️ 鸿蒙(HarmonyOS)北向开发知识点记录~ ✏️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录)

✏️ 鸿蒙(HarmonyOS)北向开发知识点记录~

✏️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~

✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

✏️ 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~

✏️ 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

✏️ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?

✏️ 记录一场鸿蒙开发岗位面试经历~

✏️ 持续更新中……


场景描述

在特殊的H5场景下需要应用拉起自定义键盘进行输入。

  • 场景一:使用jsBridge拉起自定义弹窗写自定义键盘,再通过jsBridge传参实现输入。
  • 场景二:使用web的同层渲染将原生textInput组件渲染到页面上。

方案描述

通过注册一个js代理对象被web的registerJavaScriptProxy方法调用拉起CustomDialog,在CustomDialog上放置一个customkeyboard

场景一: 通过jsBridge拉起自定义弹窗,在自定义弹窗上放置自定义键盘,例如需要输入密码时的安全键盘

效果图

方案

通过注册一个js代理对象被web的registJavaScriptProxy方法调用拉起CustomDialog,在CustomDialog上放置一个自定义键盘组件,通过在H5上input标签的readonly属性和注册的js方法changeNumbers实现在原生端输入数字传到H5上,他们之间通过@Link装饰器绑定的变量进行传值,所以点击删除输入的内容也是可以在H5上实现的。

核心代码

  1. 通过javaScriptProxy方法拉起自定义弹窗,在H5上的input标签绑定一个onclick事件,当点击输入框后会调用从原生注册过来的js代理方法openWindow。
    <input type="text" name="number_info" readonly onclick="openWindow()" value="" style="width: 500px;height: 100px;font-size:50px;border:1px solid # f00;"><script>function openWindow() {let value = document.getElementsByName("number_info")[0].value;window.myJsb.openDialog(value)}</script>
  1. 当H5上openWindow方法被调用后会通过jsBridge调用以下两个js代理方法打开自定义弹窗。
    jsbObject: JsbObject = {openDialog: (value: string) => {this.showDialog(this, value);}}showDialog(context: object, value: string) {// 把自定义弹窗调出来this.currentData = value;this.dialogController.open()}Web({ src: "resource://rawfile/web_test.html", controller: this.webviewController }).javaScriptAccess(true).javaScriptProxy({name: "myJsb",object: this.jsbObject,methodList: ["openDialog"],controller: this.webviewController})
  1. 将自定义键盘放置在自定义弹窗上。
    @CustomDialogstruct CustomDialogExample {@Link currentData: stringdialogControllerTwo: CustomDialogController | null = new CustomDialogController({builder: CustomDialogExample({ currentData: $currentData }),alignment: DialogAlignment.Bottom,offset: { dx: 0, dy: -25 }})controller?: CustomDialogControllerbuild() {Column() {Button('x').onClick(() => {// 关闭自定义键盘if (this.controller != undefined) {this.controller.close()}})Grid() {ForEach([1, 2, 3, 4, 5, 6, 7, 8, 9, '*', 0, '删除'], (item: number | string) => {GridItem() {Button(item + "").width(110).onClick(() => {if (item == '删除') {if (this.currentData.length > 0) {this.currentData = this.currentData.substring(0, this.currentData.length - 1);}} else {this.currentData += item}})}})}.maxCount(3).columnsGap(10).rowsGap(10).padding(5)}.backgroundColor(Color.Gray)}}
  1. 在自定义键盘上输入内容的时候会调用onChangeInputValue方法,通过里面的runJavaScript调用H5上的js方法changeNumber传值到H5的输入框中。
    onChangeInputValue(stateName: string){console.log('this.currentData:' + this.currentData)this.webviewController.runJavaScript('changeNumber("'+ this.currentData +'")').then((result) => {console.log('result: ' + result);})}<<input type="text" name="number_info" readonly onclick="openWindow()" value="" style="width: 500px;height: 100px;font-size:50px;border:1px solid # f00;" /><script>function changeNumber(value){document.getElementsByName("number_info")[0].value = value;}</script>

场景二: 通过同层渲染渲染一个原生的自定义键盘

效果图

方案

整体实现效果为:通过web的同层渲染功能实现将原生TextInput组件渲染到H5需要使用自定义键盘的页面中,这样就可以实现在H5拉起自定义键盘,并且使用它的全部功能。

核心代码

  1. 创建一个自定义键盘并绑定到原生textInput组件上。
    @Componentstruct ButtonComponent {controller1: TextInputController = new TextInputController()@State inputValue: string = ""// 自定义键盘组件@BuilderCustomKeyboardBuilder() {Column() {Button('x').onClick(() => {// 关闭自定义键盘this.controller1.stopEditing()})Grid() {ForEach([1, 2, 3, 4, 5, 6, 7, 8, 9, '*', 0, '# '], (item: number | string) => {GridItem() {Button(item + "").width(110).onClick(() => {this.inputValue += item})}})}.maxCount(3).columnsGap(10).rowsGap(10).padding(5)}.backgroundColor(Color.Pink)}@ObjectLink params: Params@State bkColor: Color = Color.Red@State outSetValueTwo: number = 40@State outSetValueOne: number = 40@State tipsValue: number = 40controller: web_webview.WebviewController = new web_webview.WebviewController();build() {Column() {TextInput({ controller: this.controller1, text: this.inputValue })// 绑定自定义键盘.customKeyboard(this.CustomKeyboardBuilder()).margin(10).border({ width: 1 })}.width(this.params.width).height(this.params.height)}}
  1. 将原生textInput组件通过web同层渲染功能渲染到H5上的embed标签上。
    @Entry@Componentstruct WebIndex {browserTabController: WebviewController = new webview.WebviewController()build() {Column() {Web({ src: $rawfile("test.html"), controller: this.browserTabController })// 配置同层渲染开关开启。.enableNativeEmbedMode(true)// 获取embed标签的生命周期变化数据。.onNativeEmbedLifecycleChange((embed) => {console.log("NativeEmbed surfaceId" + embed.surfaceId);// 获取web侧embed元素的id。const componentId = embed.info?.id?.toString() as stringif (embed.status == NativeEmbedStatus.CREATE) {console.log("NativeEmbed create" + JSON.stringify(embed.info))// 创建节点控制器,设置参数并rebuild。let nodeController = new MyNodeController()nodeController.setRenderOption({surfaceId: embed.surfaceId as string,type: embed.info?.type as string,renderType: NodeRenderType.RENDER_TYPE_TEXTURE,embedId: embed.embedId as string,width: px2vp(embed.info?.width),height: px2vp(embed.info?.height)})nodeController.setDestroy(false);// 根据web传入的embed的id属性作为key,将nodeController存入map。this.nodeControllerMap.set(componentId, nodeController)// 将web传入的embed的id属性存入@State状态数组变量中,用于动态创建nodeContainer节点容器,需要将push动作放在set之后。this.componentIdArr.push(componentId)} else if (embed.status == NativeEmbedStatus.UPDATE) {let nodeController = this.nodeControllerMap.get(componentId)nodeController?.updateNode({textOne: 'update',width: px2vp(embed.info?.width),height: px2vp(embed.info?.height)} as ESObject)} else {let nodeController = this.nodeControllerMap.get(componentId);nodeController?.setDestroy(true)this.nodeControllerMap.clear();this.componentIdArr.length = 0;}})// 获取同层渲染组件触摸事件信息。.onNativeEmbedGestureEvent((touch) => {console.log("NativeEmbed onNativeEmbedGestureEvent" + JSON.stringify(touch.touchEvent));this.componentIdArr.forEach((componentId: string) => {let nodeController = this.nodeControllerMap.get(componentId)if (nodeController?.getEmbedId() === touch.embedId) {let ret = nodeController?.postEvent(touch.touchEvent)if (ret) {console.log("onNativeEmbedGestureEvent success " + componentId)} else {console.log("onNativeEmbedGestureEvent fail " + componentId)}}})})}}}

    <html><head><title>同层渲染测试html</title><meta name="viewport"></head><body><div><div id="bodyId"><embed id="nativeTextInput" type="native/TextInput" width="100%" height="100%" src="test?params1=xxx?"style="background-color:pink"/></div></div></body></html>

文章转载自:

http://dVNXieyy.pbsqr.cn
http://uZszpBWW.pbsqr.cn
http://710bNCxZ.pbsqr.cn
http://jL8IdRdc.pbsqr.cn
http://debTo6ms.pbsqr.cn
http://s0NscpJp.pbsqr.cn
http://BRrCoMQn.pbsqr.cn
http://Cil2yMTy.pbsqr.cn
http://l7qqewrf.pbsqr.cn
http://3oTj2ymz.pbsqr.cn
http://qYj6ExTP.pbsqr.cn
http://9TWz6BPx.pbsqr.cn
http://ZzfuZzhG.pbsqr.cn
http://NU38nUWo.pbsqr.cn
http://1szNm57K.pbsqr.cn
http://F2Xv4P7F.pbsqr.cn
http://5p6xhhNS.pbsqr.cn
http://dnHNUXIl.pbsqr.cn
http://Oz6nfeai.pbsqr.cn
http://e2JkMyTh.pbsqr.cn
http://wvIAhtM9.pbsqr.cn
http://gvSbJWPa.pbsqr.cn
http://GWZQbNav.pbsqr.cn
http://w1RBJg2a.pbsqr.cn
http://yVIlhSsS.pbsqr.cn
http://zeXjWtDj.pbsqr.cn
http://myy348Dd.pbsqr.cn
http://fBTJo7NF.pbsqr.cn
http://ZHXJySh0.pbsqr.cn
http://g0Pr788o.pbsqr.cn
http://www.dtcms.com/wzjs/702870.html

相关文章:

  • 厦门网站建设团队新手怎么建立自己的网站
  • 品品牌牌建建设设网站代做ppt平台
  • 网站营销推广有哪些卢龙建设银行官网网站
  • 哪些是用vue做的网站python创建wordpress
  • 手工艺品网站建设方案珠海网站制作费用
  • 网站优化如何做深圳福田
  • 时装网站建设的背景青海省住房和城乡建设部网站
  • 网站配置全球贸易平台
  • 用易语言做攻击网站软件下载汽配网站建设成本
  • 小说网站开发思路抖音代运营培训
  • 辽宁做网站免费高清无专码区直接看
  • 深圳网站设计收费wordpress theme ide
  • 网易网站开发淘宝客手机网站搭建
  • 挖掘爱站网什么是二级网站推广
  • 成都建站模板制作网站的工作流程
  • 怎么把自己的网站做自适应网站网站服务器修改登录密码
  • 开发公司交钥匙流程官网seo
  • 八里庄街道网站建设网站设计时多页面切换时什么控件
  • 东莞门户网站建设报价表青岛网站设计公司在哪找
  • 网站开发都用php网站设计和网页设计
  • 我做网站价格一个网站可以做多少个小程序
  • 住房和建设厅官方网站怎么才能在百度搜到自己的网站
  • 广东粤建设计院网站seo宣传网站
  • 网站开发技术写什么内容北京最大的火车站
  • 政务服务网站建设性建议seo网站推广全程实例
  • 西宁网站建设优化四川省城乡和住房建设厅网站首页
  • 在东莞找工作上哪个网站汕头老城图片
  • 展示营销型网站做app网站制作
  • 建设解锁卡网站首页润滑油网站建设
  • 建设网站公开教学视频下载响应式网站开发周期