`

移动端安卓和IOS开发框架Framework7教程-聊天消息

阅读更多

消息组件为你的App提供了可视评论和消息系统。

消息组件布局

  1. ...   
  2. <div class="page">
  3.   <div class="page-content messages-content">
  4.     <div class="messages">
  5.       <!-- 时间戳 -->
  6.       <div class="messages-date">Sunday, Feb 9 <span>12:58</span></div>
  7.  
  8.       <!-- 发送的消息 (默认为绿色背景,在右边) -->
  9.       <div class="message message-sent">
  10.         <!-- Bubble with text -->
  11.         <div class="message-text">Hello</div>
  12.       </div>
  13.  
  14.       <!-- 另一条发送的消息 -->
  15.       <div class="message message-sent">
  16.         <!-- 文本气泡 -->
  17.         <div class="message-text">How are you?</div>
  18.       </div>
  19.  
  20.       <!-- 接收的信息(默认为灰色背景,在左边) -->
  21.       <div class="message message-with-avatar message-received">
  22.         <!-- Sender name -->
  23.         <div class="message-name">Kate</div>
  24.  
  25.         <!-- 文本气泡 -->
  26.         <div class="message-text">I am fine, thanks</div>
  27.  
  28.         <!-- 发送者头像 -->
  29.         <div style="background-image:url(http://lorempixel.com/output/people-q-c-100-100-9.jpg)" class="message-avatar"></div>
  30.       </div>
  31.  
  32.       <!-- 另一个时间戳 -->
  33.       <div class="messages-date">Sunday, Feb 3 <span>11:58</span></div>
  34.  
  35.       <!-- Sent message with image -->
  36.       <div class="message message-pic message-sent">
  37.         <!-- Bubble with image -->
  38.         <div class="message-text"><img src="http://lorempixel.com/300/300/"></div>
  39.         <!-- Message label -->
  40.         <div class="message-label">Delivered 2 days ago</div>
  41.       </div>
  42.     </div>
  43.   </div>
  44. </div>        
  45. ...
复制

消息组件的页面布局:

  • "messages-content" - 消息容器,应该加到"page-content"类上

  • "messages" - 消息气泡的容器,必需

  • "messages-date" - 单个时间戳容器,包含会话日期和时间(在<span>标签中)

  • "message" - 单条消息

单条消息的内部结构:

  • "message-name" - 发送者名称

  • "message-text" - 文本气泡

  • "message-avatar" - 发送者头像

  • "message-label" - 气泡下的文本标签

单条消息容器的一些附加class

  • "message-sent" - 标识一条被用户发送过的消息,它会位于容器的右侧并且拥有绿色的背景

  • "message-received" - 标识一条被用户接收的消息,它会位于容器的左侧并且拥有灰色的背景

  • "message-pic" - 为单条带<img>的消息添加类,除了image,该条消息不可以包括其他元素

  • "message-with-avatar" - 包含头像

  • "message-with-tail" - 包含一个小尾巴

单条消息的一个附加的class

  • "message-hide-name" - 隐藏名字

  • "message-hide-avatar" - 隐藏头像

  • "message-hide-label" - 隐藏消息标签

  • "message-last" - 如果这是一个发送者连续会话的最后一条,则带有一个小尾巴并且有更大的底部留白

  • "message-first" - 如果这是一个发送者会话的第一条,则带有发送者的名称

In such default layout - new messages will appear on bottom of the page. If you need to have new messages on top of the page you need to use newMessagesFirst:true parameter when initializing Messages

Messages Auto Layout

消息自动布局

Framework7 may add all required additional classes (like "message-pic", "message-with-avatar", "message-with-tail", etc) to each message automatically. For this case we need to use autoLayout:true parameter when initializing Messages

  1. ...   
  2.       <div class="messages-date">Sunday, Feb 9 <span>12:58</span></div>
  3.  
  4.       <div class="message message-sent">
  5.         <div class="message-text">Hello</div>
  6.       </div>
  7.  
  8.       <div class="message message-sent">
  9.         <div class="message-text">How are you?</div>
  10.       </div>
  11.  
  12.       <div class="message message-received">
  13.         <div class="message-name">Kate</div>
  14.         <div class="message-text">I am fine, thanks</div>
  15.         <div style="background-image:url(http://lorempixel.com/output/people-q-c-100-100-9.jpg)" class="message-avatar"></div>
  16.       </div>
  17.  
  18.       <div class="messages-date">Sunday, Feb 3 <span>11:58</span></div>
  19.  
  20.       <div class="message message-sent">
  21.         <div class="message-text"><img src="http://lorempixel.com/300/300/"></div>
  22.         <div class="message-label">Delivered 2 days ago</div>
  23.       </div>
  24. ...
复制

That is all, Framework7 will add all required classes to these messages. You just need to keep "message-sent", "message-received" classes

Initialize Messages with JavaScript

Now, when we have Messages' HTML, we need to initialize it. We need to use related App's method:

myApp.messages(messagesContainer, parameters) - initialize Messages with options

  • messagesContainer - HTMLElement or string (with CSS Selector) of Messages container HTML element. Required.
  • parameters - object - object with Messages parameters. Optional.
  • Method returns initialized Messages instance

For example:

  1. var myMessages = app.messages('.messages', {
  2.     autoLayout: true
  3. });
复制
Note that Messages container should be in DOM on a moment of initialization. So if you use it not on home page, you need to initialize it within pageInit event or callback

Messages Parameters

Let's look on list of all available parameters:

Parameter Type Default Description
autoLayout boolean true Enable Auto Layout to add all required additional classes (like "message-pic", "message-with-avatar", "message-with-tail", etc) to each message automatically
newMessagesFirst boolean false Enable if you want to use new messages on top, instead of having them on bottom
messages array   Array with initial messages. Each message in array should be presented as object with message parameters
messageTemplate string * Look bellow Single message Template7 template

Message Template

You can modify message template by passing your custom Template7-formatted template. By default it is:

  1. {{#if day}}
  2. <div class="messages-date">{{day}} {{#if time}}, <span>{{time}}</span>{{/if}}</div>
  3. {{/if}}
  4. <div class="message message-{{type}} {{#if hasImage}}message-pic{{/if}} {{#if avatar}}message-with-avatar{{/if}} message-appear-
  5.     {{#if name}}<div class="message-name">{{name}}</div>{{/if}}
  6.     <div class="message-text">{{text}}</div>
  7.     {{#if avatar}}<div class="message-avatar" style="background-image:url({{avatar}})"></div>{{/if}}
  8.     {{#if label}}<div class="message-label">{{label}}</div>{{/if}}
  9. </div>
复制

Messages Methods & Properties

After we initialize Messages we have its initialized instance in variable (like myMessages variable in example above) with helpful methods and properties:

PropertiesMethods
myMessages.params Object with passed initialization parameters
myMessages.container Dom7 element with messagebar container HTML element.
myMessages.addMessage(messageParameters, method, animate);

Add new message to the end or to the beginning depending on methodparameter

  • messageParameters - object parameters of message to add. Required.
  • method - string - ('append' or 'prepend') dictates to add new message in the end or in the beginning of messages container. Optional, if not specified, then it will add message depending on newMessagesFirstparameter
  • animate - boolean - (by default true) You may pass here false and message will be added immediately without any transiton and scrolling animation. Optional.
  • Method returns HTMLElement of added messsage
myMessages.appendMessage(messageParameters, animate); Add new message to the end (to the bottom)
myMessages.prependMessage(messageParameters, animate); Add new message to the beginning (to the top)
myMessages.addMessages(messages, method, animate); Add multiple messages per once.
  • messages - array with messages to add. Each message in array should be presented as object with message parameters Required.
  • Method returns array of HTMLElements with added messsages
myMessages.removeMessage(message); Remove message
  • message - HTMLElement or string (with CSS Selector) of message element to remove. Required
  • Method returns true if specified message was removed
myMessages.removeMessages(messages); Remove multiple messages
  • messages - array (with HTMLElements) or string (with CSS Selector) of messages to remove. Required
  • Method returns true if specified messages was removed
myMessages.scrollMessages(); Scroll messages to top/bottom depending on newMessagesFirst parameter
myMessages.layout(); Apply messages auto layout
myMessages.clean(); Clean/remove all the messages
myMessages.destroy(); Destroy messages instance

Single Message Parameters

Let's look on single message parameters object that we should use to addMessage, appendMessage and prependMessage methods:

参数 类型 默认 说明
text string   消息文本,也可以使用HTML字符串,如果你想要添加图片消息,则应该传递<img src="...">必选
name string   发送者名称。可选
avatar string   发送者头像url。可选
type string 'sent' 消息类型,'sent'或'received'。可选
label string   Message label. Optional
day string   日期,例如 - 'Today', 'Monday', 'Yesterday', 'Fri', '22.05.2014'。可选
time string   Time string, for example - '22:45', '10:30 AM'. Optional

Initialize Messages with HTML

If you don't need to use Messages methods and properties you can initialize it using HTML without JavaScript. You can do that just by adding additional "messages-init" class to .messages. In this case we may pass required parameters using data- attributes.

  1. ...   
  2.   <div class="page-content messages-content">
  3.     <!-- Additional "messages-init" class-->
  4.     <div class="messages messages-init" data-auto-layout="true" data-new-messages-first="false">
  5.       <div class="messages-date">Sunday, Feb 9 <span>12:58</span></div>
  6.  
  7.       <div class="message message-sent">
  8.         <div class="message-text">Hello</div>
  9.       </div>
  10.  
  11.       ...
  12.  
  13.     </div>
  14.   </div>
  15. ...
复制

Parameters that used in camelCase, for example autoLayout, in data- attributes should be used as hypens-case as data-auto-layout

Access to Messages's Instance

If you initialize Messages using HTML it is still possible to access to Messages's instance. It is "f7Messages" property of messages's container HTML element:

  1. var myMessages = $$('.messages')[0].f7Messages;
  2.  
  3. // Now you can use it
  4. myMessages.layout();
复制

Example

  1. <div class="page toolbar-fixed">
  2.   <div class="page-content messages-content">
  3.     <div class="messages">
  4.       <div class="messages-date">Sunday, Feb 9 <span>12:58</span></div>
  5.       <div class="message message-sent">
  6.         <div class="message-text">Hello</div>
  7.       </div>
  8.       <div class="message message-sent">
  9.         <div class="message-text">How are you?</div>
  10.       </div>
  11.       <div class="message message-received">
  12.         <div class="message-name">Kate</div>
  13.         <div class="message-text">I am fine, thanks</div>
  14.         <div style="background-image:url(http://lorempixel.com/output/people-q-c-100-100-9.jpg)" class="message-avatar"></div>
  15.       </div>
  16.       <div class="messages-date">Sunday, Feb 3 <span>11:58</span></div>
  17.       <div class="message message-sent">
  18.         <div class="message-text">Nice photo?</div>
  19.       </div>
  20.       <div class="message message-sent message-pic">
  21.         <div class="message-text"><img src="http://lorempixel.com/300/300/"></div>
  22.         <div class="message-label">Delivered</div>
  23.       </div>
  24.       <div class="message message-received">
  25.         <div class="message-name">Kate</div>
  26.         <div class="message-text">Wow, awesome!</div>
  27.         <div style="background-image:url(http://lorempixel.com/output/people-q-c-100-100-9.jpg)" class="message-avatar"></div>
  28.       </div>
  29.     </div>
  30.   </div>
  31. </div>
复制

  实例预览

  1. var myApp = new Framework7();
  2.  
  3. var $$ = Dom7;
  4.  
  5. // 会话flag
  6. var conversationStarted = false;
  7.  
  8. // Init Messages
  9. var myMessages = myApp.messages('.messages', {
  10.   autoLayout:true
  11. });
  12.  
  13. // Init Messagebar
  14. var myMessagebar = myApp.messagebar('.messagebar');
  15.  
  16. // Handle message
  17. $$('.messagebar .link').on('click', function () {
  18.   // Message text
  19.   var messageText = myMessagebar.value().trim();
  20.   // Exit if empy message
  21.   if (messageText.length === 0) return;
  22.  
  23.   // Empty messagebar
  24.   myMessagebar.clear()
  25.  
  26.   // 随机消息类型
  27.   var messageType = (['sent', 'received'])[Math.round(Math.random())];
  28.  
  29.   // 接收的消息的头像和名称
  30.   var avatar, name;
  31.   if(messageType === 'received') {
  32.     avatar = 'http://lorempixel.com/output/people-q-c-100-100-9.jpg';
  33.     name = 'Kate';
  34.   }
  35.   // Add message
  36.   myMessages.addMessage({
  37.     // Message text
  38.     text: messageText,
  39.     // 随机消息类型
  40.     type: messageType,
  41.     // 头像和名称
  42.     avatar: avatar,
  43.     name: name,
  44.     // 日期
  45.     day: !conversationStarted ? 'Today' : false,
  46.     time: !conversationStarted ? (new Date()).getHours() + ':' + (new Date()).getMinutes() : false
  47.   })
  48.  
  49.   // 更新会话flag
  50.   conversationStarted = true;
  51. });
复制

 

4
2
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Framework7是一个用于构建iOS和Android应用的全功能HTML框架

    Framework7 是免费开源的 HTML 移动端框架,用来开发混合移动端应用或者 iOS 7 的 Web 应用,并且带有 iOS 7 的原生外观和感觉。Framework7 也是独立的原型应用工具。

    vue-framework7-master.zip

    Vue.js 是一个轻量级的前端JavaScript框架,以其易学易用、高效和灵活性著称,而Framework7则是一个模仿iOS和Android原生界面的Web App框架。 在这个"vue-framework7-master"项目中,我们可以看到以下关键组成部分...

    Mobile Security Framework

    MobSF是Mobile Security Framework的缩写,是一个移动端应用安全问题检出的框架和工具,它适用于Android/iOS/Windows,能够执行动态和静态的恶意软件的分析和检测。支持Android和iOS以及Windows移动应用,无论是二...

    HTML移动端框架Framework7 1.6.4.zip

    Framework7是一款强大的HTML5移动应用框架,专为构建原生感觉的iOS和Android应用而设计。这个1.6.4版本的压缩包包含了用于开发移动端Web应用的所有必要资源和文件,使得开发者能够利用HTML、CSS和JavaScript技术创建...

    参考HiApp搭建的一款基于Framework7Vue和H5Plus的商城模板

    其中,`Framework7`是一个流行的开源移动应用框架,它模仿了原生iOS和Android的UI设计,提供了丰富的组件和交互效果,使得开发者能够构建出与原生应用相似的体验。`Vue.js`是一个轻量级的前端MVVM(Model-View-...

    Robot Framework 源代码阅读笔记 之 一 - CSDN博客

    Appium是一个用于移动端UI自动化测试的工具,它支持iOS和Android平台上的原生、移动Web和混合应用。 除了测试工具,文章还提及了性能测试相关的工具。Locust是一个基于事件的性能测试工具,它使用Python的协程来...

    完整.net服务端Android、IOS客户端

    这个项目采用的技术栈是ASP.NET MVC和WebAPI作为后端开发框架,用于提供服务和数据接口,而Android Studio则用于构建Android客户端,iOS端虽然没有详细描述,但通常也会使用Swift或Objective-C进行开发。 描述中...

    移动端:手把手带你入门跨平台UI开发框架Flutter,看完这篇-flutter框架

    **Flutter** 是一款由Google推出的跨平台移动应用开发框架,旨在通过一套代码库就能开发出高质量的iOS和Android应用。该框架的核心优势在于其高效的开发速度、优秀的性能表现以及强大的跨平台能力。 #### 二、关键...

    移动端WebUI框架CMUI.zip

    一个简单粗暴的移动端 Web UI 框架。CMUI 是一个专攻移动网页的 UI 框架,它提供了丰富的组件和简洁的接口,开箱即用。CMUI 帮助开发者摆脱样式细节和兼容性困扰,从而腾出更多精力投入到业务开发中。兼容性浏览器...

    常用的移动端和前端的资源

    React Native是由Facebook开发的开源框架,它允许开发者用JavaScript和React语法构建原生的iOS和Android应用。通过React的声明式编程模型和组件化思想,开发者可以实现高效且可复用的代码,大大简化了移动应用的开发...

    HTML移动端框架Framework7 1.6.4

    Framework7是一个开源免费的HTML移动端框架,可以用来开发混合移动应用(原生和HTML混合)或者开发iOS&Android风格的WEB APP,也可以用来作为原型开发工具,可以迅速创建一个应用的原型。Framework7 1.6.4 更新日志:...

    移动端渗透测试框架MSF

    移动安全框架MSF(Mobile Security Framework - MobSF)是一个全面的、开源的渗透测试和安全分析平台,专门针对移动应用,如Android和iOS应用程序。它为安全专家提供了自动化静态和动态分析工具,帮助他们在开发周期...

    framework7-recipes:Framework7概念证明模板,布局和脚本

    Framework7 是由Ilya Krasheninnikov开发的,它支持HTML5、CSS3和JavaScript技术,可以构建iOS和Android风格的应用。框架的核心特性包括页面路由、组件库、交互动画以及可定制的主题。 二、项目结构 在"framework7...

    xamarin +Prism 进行移动端开发

    在移动应用开发领域,Xamarin 和 Prism 是两个强大的工具,它们结合使用可以为开发者提供一套高效、跨平台的解决方案,支持构建高质量的Android、iOS和Windows应用程序。让我们深入探讨一下如何利用Xamarin和Prism...

    AureliaFramework7一个轻量级的移动应用平台

    Framework7则是一款流行的移动应用UI框架,它提供了一套完整的iOS和Android风格的组件,包括导航栏、侧滑菜单、表单元素等,使得开发者可以快速构建出原生感观的应用界面。当Aurelia与Framework7结合时,开发者可以...

    meteor-framework7:framework7整合

    Framework7 是一款强大的移动端 UI 框架,提供了丰富的组件和布局选项,可帮助开发者构建出高度仿原生的 iOS 和 Android 应用界面。其组件库包括滑动导航、侧滑菜单、下拉刷新、上拉加载更多等,能够满足多种应用...

    meteor-framework7

    Framework7 是一款强大的HTML5移动应用框架,模仿原生iOS和Android的界面风格,提供了丰富的组件和API,使得开发者能够用HTML、CSS和JavaScript构建出与原生应用体验相近的Web应用。它特别适合构建单页应用(SPA)和...

    透视C#核心技术:系统架构及移动端开发源码

    7. **移动端开发**:在移动端,C#通过Xamarin或Unity3D支持iOS和Android应用开发。学习如何使用这些工具和技术,结合C#编写跨平台的移动应用,是现代开发者的必备技能。 8. **单元测试与持续集成**:TDD(Test-...

    rexxar-ios:移动混合框架Rexxar iOS容器

    Rexxar 是一个针对移动端的混合开发框架。现在支持 Android 和 iOS 平台。Rexxar-iOS 是 Rexxar 在 iOS 系统上的客户端实现。 通过 Rexxar,你可以使用包括 javascript,css,html 在内的传统前端技术开发移动应用。...

    移动端APP女性化妆品超市商城模板.zip

    Framework7是一款开源的HTML5移动应用框架,它允许开发者使用Web技术(HTML, CSS, JavaScript)来构建原生iOS和Android应用,其设计灵感来源于苹果的Swift和Objective-C。该框架提供了丰富的组件和交互效果,使得...

Global site tag (gtag.js) - Google Analytics