基于HBulider和mui框架创建移动微信app

2023-10-22 10:30

本文主要是介绍基于HBulider和mui框架创建移动微信app,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

项目包自取:
链接:https://pan.baidu.com/s/1ZMmiWSXq7290D_j0wUJ09Q
提取码:6o0l

夜神模拟器的配置和下载过程:
https://blog.csdn.net/weixin_45678130/article/details/113540631

code:

此项目的实现原理
在这里插入图片描述
在这里插入图片描述

index.html(js和body部分):

<body><header class="mui-bar mui-bar-nav"><h1 class="mui-title">微信</h1></header><nav class="mui-bar mui-bar-tab"><a class="mui-tab-item mui-active" href="sub1.html"><span class="mui-icon mui-icon-chatbubble"></span><span class="mui-tab-label">微信</span></a><a class="mui-tab-item" href="sub2.html"><span class="mui-icon mui-icon-contact" ></span><span class="mui-tab-label">通讯录</span></a><a class="mui-tab-item" href="sub3.html"><span class="mui-icon mui-icon-navigate"></span><span class="mui-tab-label">发现</span></a><a class="mui-tab-item" href="sub4.html"><span class="mui-icon mui-icon-person"></span><span class="mui-tab-label"></span></a></nav>
</body>
<script type="text/javascript" charset="utf-8">mui.init();//初始化页面应用mui//mui加载完成事件mui.plusReady(function(){//定义子页面的数组var subPages=["sub1.html","sub2.html","sub3.html","sub4.html"];//子页面样式var subPageStyle={top:"44px",bottom:"50px"};//主webviewvar mainView=plus.webview.currentWebview();//遍历数组,根据每个子页面url创建webviewfor(var i=0;i<subPages.length;i++){var url=subPages[i];//创建webview//函数原型plus.webview.create(url,id,style),返回webview对象var subView=plus.webview.create(url,url,subPageStyle);//隐藏子webviewsubView.hide();//把子webview加到主WebviewmainView.append(subView);}//把第一个subView显示出来plus.webview.show(subPages[0]);//给每个导航栏目设置tap事件(轻击事件,注意不是tab)//网页事件onclick,click在这里无效//原型mui(html元素的父选择器).on(事件名,注册事件的html元素选择器,事件)mui(".mui-bar-tab").on("tap","a",function(){//获取事件源对象的属性的值var id=this.getAttribute("href");//设置子页面的显示plus.webview.show(id);});});</script>

然后放一下聊天页面和朋友圈的sub页面 其余的可以见项目包
sub1.html:

<div class="mui-content"><ul class="mui-table-view"><li class="mui-table-view-cell mui-media"><a href="javascript:;" title="幸福"><img class="mui-media-object mui-pull-left" src="img/f1.jpg"><div class="mui-media-body">幸福<p class="mui-ellipsis">能和心爱的人一起睡觉,是件幸福的事情;可是,打呼噜怎么办?</p></div></a></li><li class="mui-table-view-cell mui-media"><a href="javascript:;" title="木屋"><img class="mui-media-object mui-pull-left" src="img/f2.jpg"><div class="mui-media-body">木屋<p class="mui-ellipsis">想要这样一间小木屋,夏天挫冰吃瓜,冬天围炉取暖.</p></div></a></li><li class="mui-table-view-cell mui-media"><a href="javascript:;" title="CBD"><img class="mui-media-object mui-pull-left" src="img/f3.jpg"><div class="mui-media-body">CBD<p class="mui-ellipsis">烤炉模式的城,到黄昏,如同打翻的调色盘一般.</p></div></a></li><li class="mui-table-view-cell mui-media"><a href="javascript:;" title="中国移动10086"><img class="mui-media-object mui-pull-left" src="img/f4.jpg"><div class="mui-media-body">中国移动10086<p class="mui-ellipsis">点我!!免费领2G流量!!</p></div></a></li><li class="mui-table-view-cell mui-media"><a href="javascript:;" title="微信团队"><img class="mui-media-object mui-pull-left" src="img/f5.jpg"><div class="mui-media-body">微信团队<p class="mui-ellipsis">欢迎你再次回到微信。如果你在使用过程中有任何的问题或建议,记得给我发信反馈哦。
</p></div></a></li></ul></div>
<script type="text/javascript">mui.init();mui.plusReady(function(){mui(".mui-table-view-cell").on("tap","a",function(){//获取好友名称var title=this.getAttribute("title");//打开聊天页面mui.openWindow({url:"sub1/chat.html",id:"sub1/chat.html",extras:{//键值对name:title//自定义扩展参数,可以用来处理页面间传值},show:{autoShow:true,//页面loaded事件发生后自动显示,默认为trueaniShow:"slide-in-right",//页面显示动画,默认为”slide-in-right“;duration:100//页面动画持续时间,Android平台默认100毫秒,iOS平台默认200毫秒;},waiting:{autoShow:true,//自动显示等待框,默认为truetitle:'正在加载...'//等待对话框上显示的提示内容}})});});</script>

chat.html:(实现类似功能)
在这里插入图片描述
点击图标可以发送图片,然后可以发送信息至页面

sub3.html:

<div class="mui-content"><ul class="mui-table-view"><li class="mui-table-view-cell  mui-left" id="friend"><span class="mui-icon mui-icon-pengyouquan"> &nbsp;&nbsp;朋友圈</span></li></ul><br /><ul class="mui-table-view"><li class="mui-table-view-cell  mui-left"><span class="mui-icon mui-icon-camera"/> &nbsp;&nbsp;扫一扫</li><li class="mui-table-view-cell  mui-left"><span class="mui-icon mui-icon-spinner mui-spin"/> &nbsp;&nbsp;摇一摇</li></ul><br /> <ul class="mui-table-view"><li class="mui-table-view-cell  mui-left"><span class="mui-icon mui-icon-home"/> &nbsp;&nbsp;购物</li><li class="mui-table-view-cell  mui-left"><span class="mui-icon mui-icon-star"/> &nbsp;&nbsp;游戏</li></ul></div>
<script type="text/javascript">mui.init();mui.plusReady(function(){//给朋友圈注册轻击事件var friend=document.getElementById("friend");friend.addEventListener("tap",function(){mui.openWindow({url:"sub3/friend.html",id:"sub3/friend.html",show:{autoShow:true,//页面loaded事件发生后自动显示,默认为trueaniShow:"slide-in-right",//页面显示动画,默认为”slide-in-right“;duration:100//页面动画持续时间,Android平台默认100毫秒,iOS平台默认200毫秒;},waiting:{autoShow:true,//自动显示等待框,默认为truetitle:'正在加载...'//等待对话框上显示的提示内容}})});});</script>

friend.html:
在这里插入图片描述

其中用到了下拉刷新容器pullRefresh

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport"content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes"><title>朋友圈</title>
<script src="../js/mui.min.js"></script>
<link href="../css/mui.min.css" rel="stylesheet"/>
<link rel="stylesheet" type="text/css" href="../css/main.css"/>
<link rel="stylesheet" href="../css/friend.css">
<link rel="stylesheet" href="../css/iconfont.css">
<link rel="stylesheet prefetch" href="../css/photoswipe.css">
<link rel="stylesheet prefetch" href="../css/default-skin.css"><script>mui.init({pullRefresh: {container: '#pullrefresh',down: {style:'circle',callback: pulldownRefresh},up: {auto:true,contentrefresh: '正在加载...',callback: pullupRefresh}}});var count = 0;function pullupRefresh() {setTimeout(function() {mui('#pullrefresh').pullRefresh().endPullupToRefresh((++count > 2)); //参数为true代表没有更多数据了。var table = document.body.querySelector('.ultable');var cells = document.body.querySelectorAll('.mui-table-view-cell');var newCount = cells.length>0?5:20;//首次加载20条,满屏for (var i = cells.length, len = i + newCount; i < len; i++) {var li = document.createElement('li');li.className = 'mui-table-view-cell';li.innerHTML = '<a class="mui-navigate-right">Item ' + (i + 1) + '</a>';table.appendChild(li);}}, 1500);}function addData() {var table = document.body.querySelector('.ultable');var cells = document.body.querySelectorAll('.mui-table-view-cell');for(var i = cells.length, len = i + 5; i < len; i++) {var li = document.createElement('li');li.className = 'mui-table-view-cell';li.innerHTML = '<a class="mui-navigate-right">Item ' + (i + 1) + '</a>';//下拉刷新,新纪录插到最前面;table.insertBefore(li, table.firstChild);}}/*** 下拉刷新具体业务实现*/function pulldownRefresh() {setTimeout(function() {addData();mui('#pullrefresh').pullRefresh().endPulldownToRefresh();mui.toast("为你推荐了5篇文章");}, 1500);}</script>
</head><body style="background-color: #fff;"><header class="mui-bar mui-bar-nav"><a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a><h1 class="mui-title">朋友圈</h1></header><div id="_contain"><div class="banner" style="position: relative;"><div class="top_bg"></div><div style="width:80px; height:80px;position: absolute;background-color: #F3F3F7;right: 10px;bottom: -30px;"><img src="../img/tx.jpg" style="width:96%; margin: 2%;"></div><div style="position: absolute;right: 100px;bottom: 10px;color: white;">在路上的愚人</div></div><!--下拉刷新容器--><div id="pullrefresh" class="mui-content mui-scroll-wrapper"><div class="mui-scroll"><div class="contain" style="margin: 40px 0 0;"><ul class="ultable"> <li><div class="body"><div class="logo"><img src="../img/tx2.jpg"></div><div class="text"><div class="title">小黄人</div><div class="txt">在宇宙中未知的地方有一个由12个人类殖民地组成的星际国家,人类为了方便制造了Cylons(机器人)为人类服务,但Cylons起来反抗人类,双方在血战之后停火,Cylons离开了殖民地去建立自己的家园。40年的和平让<span id="p1">...</span><span id="txt1" style="display:none;">人类放松了警惕,Cylons通过人类内部的间谍瘫痪了人类的防御系统,摧毁了Battlestar舰队,用核武器将殖民地的城市化为灰烬。Battlestar Galactica是唯一一艘幸存的航母,它在舰长Adama的指挥下带领几十艘各式各样的民船和近5万名幸存者逃离了殖民地的行星系统,开始了寻找人类的第13个殖民地——地球——的旅程。</span></div><div style="color: #88B1C5;" onclick="more(this,'1')">全文</div><div class="my-gallery" data-pswp-uid="1"><figure><span><a href="../img/th1.jpg" data-size="670x712"><img style="width:80%;" src="../img/th1.jpg"></a></span></figure></div><div class="tm"><div class="fl">1分钟前</div><div class="fr">评论</div></div><div class="cmt"><div class="fav line"><i class="iconfont">&#xe616;</i>小豪,李小爱</div><div><span>小豪:</span>什么</div><div><span>淘淘:</span>I use owl carousel to generate a slider, but at the same time I want to use Photoswipe, but I can't. When I use the Owl carousel plugin, the slider's inserted into the code with a speciel markup, where each item (image) has a class of .item and the image is located 3 layers deep into that div.</div></div></div></div></li><li><div class="body"><div class="logo"><img src="../img/tx3.jpg"></div><div class="text"><div class="title">小清新</div><div class="txt">买了一个更帅的电饭锅,可以手机远程操制的,开心</div><!--data-pswp-uid 是每个gallery的id不能重复--><div class="my-gallery" data-pswp-uid="2"><figure><div><a href="../img/s5.jpg" data-size="286x220"><img style="height:100%;" src="../img/s5.jpg"></a></div><figcaption style="display:none;">在这里可增加图片描述</figcaption></figure><figure><div><a href="../img/sb1.jpg" data-size="640x426"><img style="height:100%;" src="../img/sb1.jpg"></a></div><figcaption style="display:none;">在这里可增加图片描述2</figcaption></figure><figure><div><a href="../img/sb3.jpg" data-size="768x1024"><img style="width:100%;" src="../img/sb3.jpg"></a></div><figcaption style="display:none;">在这里可增加图片描述3</figcaption></figure><figure><div><a href="../img/sb4.jpg" data-size="900x596"><img style="height:100%;" src="../img/sb4.jpg"></a></div><figcaption style="display:none;">在这里可增加图片描述4</figcaption></figure><figure><div><a href="../img/y1.jpg" data-size="1200x1200"><img  style="height:100%;" src="../img/y1.jpg"></a></div><figcaption style="display:none;">在这里可增加图片描述5在这里可增加图片描述5在这里可增加图片描述5</figcaption></figure></div><div class="tm"><div class="fl">2分钟前</div><div class="fr">评论</div></div><div class="cmt"><div class="fav"><i class="iconfont">&#xe616;</i>ANTHONY,☆Sanly☆</div><div><span>ANTHONY:</span>这么先进,和我家的那台一样,打个电话,照样有饭吃,一键式,还带做菜功能,还能洗碗聊天晾衣服</div><div><span>☆Sanly☆:</span>远程?还有洗米放水功能?</div></div></div></div></li></ul></div></div></div></div><!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true"><!-- Background of PhotoSwipe. It's a separate element as animating opacity is faster than rgba(). --><div class="pswp__bg"></div><!-- Slides wrapper with overflow:hidden. --><div class="pswp__scroll-wrap"><!-- Container that holds slides. PhotoSwipe keeps only 3 of them in the DOM to save memory.Don't modify these 3 pswp__item elements, data is added later on. --><div class="pswp__container"><div class="pswp__item"></div><div class="pswp__item"></div><div class="pswp__item"></div></div><!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. --><div class="pswp__ui pswp__ui--hidden"><div class="pswp__top-bar"><!--  Controls are self-explanatory. Order can be changed. --><div class="pswp__counter"></div><button class="pswp__button pswp__button--close" title="Close (Esc)"></button><button class="pswp__button pswp__button--share" title="Share"></button><button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button><button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button><!-- element will get class pswp__preloader--active when preloader is running --><div class="pswp__preloader"><div class="pswp__preloader__icn"><div class="pswp__preloader__cut"><div class="pswp__preloader__donut"></div></div></div></div></div><div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap"><div class="pswp__share-tooltip"></div> </div><button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"></button><button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"></button><div class="pswp__caption"><div class="pswp__caption__center"></div></div></div>
</div>
</div>
</body>
<script src="../js/jquery-3.3.1.min.js"></script>
<script src="../js/photoswipe.js"></script>
<script src="../js/photoswipe-ui-default.min.js"></script>
<script type="text/javascript">var initPhotoSwipeFromDOM = function(gallerySelector) {// 解析来自DOM元素幻灯片数据(URL,标题,大小...)// (children of gallerySelector)var parseThumbnailElements = function(el) {var thumbElements = el.childNodes,numNodes = thumbElements.length,items = [],figureEl,linkEl,size,item,divEl;for(var i = 0; i < numNodes; i++) {figureEl = thumbElements[i]; // <figure> element// 仅包括元素节点if(figureEl.nodeType !== 1) {continue;}divEl = figureEl.children[0];linkEl = divEl.children[0]; // <a> elementsize = linkEl.getAttribute('data-size').split('x');// 创建幻灯片对象item = {src: linkEl.getAttribute('href'),w: parseInt(size[0], 10),h: parseInt(size[1], 10)};if(figureEl.children.length > 1) {// <figcaption> contentitem.title = figureEl.children[1].innerHTML; }if(linkEl.children.length > 0) {// <img> 缩略图节点, 检索缩略图网址item.msrc = linkEl.children[0].getAttribute('src');} item.el = figureEl; // 保存链接元素 for getThumbBoundsFnitems.push(item);}return items;};// 查找最近的父节点var closest = function closest(el, fn) {return el && ( fn(el) ? el : closest(el.parentNode, fn) );};// 当用户点击缩略图触发var onThumbnailsClick = function(e) {e = e || window.event;e.preventDefault ? e.preventDefault() : e.returnValue = false;var eTarget = e.target || e.srcElement;// find root element of slidevar clickedListItem = closest(eTarget, function(el) {return (el.tagName && el.tagName.toUpperCase() === 'FIGURE');});if(!clickedListItem) {return;}// find index of clicked item by looping through all child nodes// alternatively, you may define index via data- attributevar clickedGallery = clickedListItem.parentNode,childNodes = clickedListItem.parentNode.childNodes,numChildNodes = childNodes.length,nodeIndex = 0,index;for (var i = 0; i < numChildNodes; i++) {if(childNodes[i].nodeType !== 1) { continue; }if(childNodes[i] === clickedListItem) {index = nodeIndex;break;}nodeIndex++;}if(index >= 0) {// open PhotoSwipe if valid index foundopenPhotoSwipe( index, clickedGallery );}return false;};// parse picture index and gallery index from URL (#&pid=1&gid=2)var photoswipeParseHash = function() {var hash = window.location.hash.substring(1),params = {};if(hash.length < 5) {return params;}var vars = hash.split('&');for (var i = 0; i < vars.length; i++) {if(!vars[i]) {continue;}var pair = vars[i].split('=');  if(pair.length < 2) {continue;}           params[pair[0]] = pair[1];}if(params.gid) {params.gid = parseInt(params.gid, 10);}return params;};var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) {var pswpElement = document.querySelectorAll('.pswp')[0],gallery,options,items;items = parseThumbnailElements(galleryElement);// 这里可以定义参数options = {barsSize: { top: 100,bottom: 100}, fullscreenEl : false,shareButtons: [{id:'wechat', label:'分享微信', url:'#'},{id:'weibo', label:'新浪微博', url:'#'},{id:'download', label:'保存图片', url:'{{raw_image_url}}', download:true}],// define gallery index (for URL)galleryUID: galleryElement.getAttribute('data-pswp-uid'),getThumbBoundsFn: function(index) {// See Options -> getThumbBoundsFn section of documentation for more infovar thumbnail = items[index].el.getElementsByTagName('img')[0], // find thumbnailpageYScroll = window.pageYOffset || document.documentElement.scrollTop,rect = thumbnail.getBoundingClientRect(); return {x:rect.left, y:rect.top + pageYScroll, w:rect.width};}};// PhotoSwipe opened from URLif(fromURL) {if(options.galleryPIDs) {// parse real index when custom PIDs are used for(var j = 0; j < items.length; j++) {if(items[j].pid == index) {options.index = j;break;}}} else {// in URL indexes start from 1options.index = parseInt(index, 10) - 1;}} else {options.index = parseInt(index, 10);}// exit if index not foundif( isNaN(options.index) ) {return;}if(disableAnimation) {options.showAnimationDuration = 0;}// Pass data to PhotoSwipe and initialize itgallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);gallery.init();};// loop through all gallery elements and bind eventsvar galleryElements = document.querySelectorAll( gallerySelector );for(var i = 0, l = galleryElements.length; i < l; i++) {galleryElements[i].setAttribute('data-pswp-uid', i+1);galleryElements[i].onclick = onThumbnailsClick;}// Parse URL and open gallery if it contains #&pid=3&gid=1var hashData = photoswipeParseHash();if(hashData.pid && hashData.gid) {openPhotoSwipe( hashData.pid ,  galleryElements[ hashData.gid - 1 ], true, true );}};// execute above functioninitPhotoSwipeFromDOM('.my-gallery');$(".my-gallery>figure>div").each(function(){$(this).height($(this).width());});function more(obj,id) {if ($('#txt'+id).is(":hidden")) {$('#p'+id).hide();$('#txt'+id).show();obj.innerHTML='收起';} else {$('#p'+id).show();$('#txt'+id).hide();obj.innerHTML='全文';}}
</script>
</html>

这篇关于基于HBulider和mui框架创建移动微信app的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/260839

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换