Modal 是从App的主要内容区域上弹出的一小块内容块. Modals经常被用来向用户询问信息,或通知或警告用户。 Modal和其他所有的遮罩图层一样,是所谓的“临时视图”的一部分。
Modals 可以只用JavaScript打开。所以让我们来看看使用modals的相关APP方法
预定义的 Modals
-
注意,如果你没有指定预定义的modal标题,它讲使用默认的标题("Framework7"),这个可以在App 初始化时,通过传递modalTitle 参数改变。
-
预定义modals的按钮文本(如 "Ok" 和 "Cancel") 也可以在 App 初始化时,通过传递 modalButtonOk 和 modalButtonCancel 参数改变。
首先,让我们看看已经预定义的最常用的modal:
Alert
我们需要调用以下任一一种App方法来打开Alert modal :myApp.alert(text, [title, callbackOk])
or
myApp.alert(text, [callbackOk])
- text - string. Alert文本
- title - string. Optional. Alert modal 标题
- callbackOk - function. Optional.在Alert modal下,当用户点击“Ok”按钮时,回调函数将被执行。
- 该方法返回动态创建的modal的HTML元素。
- <body>
- ...
- <div class="page-content">
- <div class="content-block">
- <p><a href="#" class="alert-text">Alert With Text</a></p>
- <p><a href="#" class="alert-text-title">Alert With Text and Title</a></p>
- <p><a href="#" class="alert-text-title-callback">Alert With Text and Title and Callback</a></p>
- <p><a href="#" class="alert-text-callback">Alert With Text and Callback</a></p>
- </div>
- </div>
- ...
- </body>
- var myApp = new Framework7();
- var $$ = Dom7;
- $$('.alert-text').on('click', function () {
- myApp.alert('Here goes alert text');
- });
- $$('.alert-text-title').on('click', function () {
- myApp.alert('Here goes alert text', 'Custom Title!');
- });
- $$('.alert-text-title-callback').on('click', function () {
- myApp.alert('Here goes alert text', 'Custom Title!', function () {
- myApp.alert('Button clicked!')
- });
- });
- $$('.alert-text-callback').on('click', function () {
- myApp.alert('Here goes alert text', function () {
- myApp.alert('Button clicked!')
- });
- });
Confirm
Confirm modal 经常在需要确认一些行为时被使用. 打开Alert modal同样也需要调用以下任一一种App方法:
myApp.confirm(text, [title, callbackOk, callbackCancel])
or
myApp.confirm(text, [callbackOk, callbackCancel])
- text - string. Confirm 文本
- title - string. Optional. Confirm modal 标题
- callbackOk - function. Optional. 在 Confirm modal下,当用户点击“Ok”按钮时,回调函数将被执行。(当用户确认操作)
- callbackCancel - function. Optional. 在 Confirm modal下,当用户点击“Cancel”按钮时,回调函数将被执行。(当用户不想进行操作)
- 该方法返回动态创建的modal的HTML元素。
- <body>
- ...
- <div class="page-content">
- <div class="content-block">
- <p><a href="#" class="confirm-ok">Confirm with text and Ok callback</a></p>
- <p><a href="#" class="confirm-ok-cancel">Confirm with text, Ok and Cancel callbacks</a></p>
- <p><a href="#" class="confirm-title-ok">Confirm with text, title and Ok callback</a></p>
- <p><a href="#" class="confirm-title-ok-cancel">Confirm with text, title, Ok and Cancel callback</a></p>
- </div>
- </div>
- ...
- </body>
- $$('.confirm-ok').on('click', function () {
- myApp.confirm('Are you sure?', function () {
- myApp.alert('You clicked Ok button');
- });
- });
- $$('.confirm-ok-cancel').on('click', function () {
- myApp.confirm('Are you sure?',
- function () {
- myApp.alert('You clicked Ok button');
- },
- function () {
- myApp.alert('You clicked Cancel button');
- }
- );
- });
- $$('.confirm-title-ok').on('click', function () {
- myApp.confirm('Are you sure?', 'Custom Title', function () {
- myApp.alert('You clicked Ok button');
- });
- });
- $$('.confirm-title-ok-cancel').on('click', function () {
- myApp.confirm('Are you sure?', 'Custom Title',
- function () {
- myApp.alert('You clicked Ok button');
- },
- function () {
- myApp.alert('You clicked Cancel button');
- }
- );
- });
Prompt
Prompt modal 经常在需要从用户那里得到一些数据/答案时使用。打开 Prompt modal同样也需要调用以下任一一种App方法:
myApp.prompt(text, [title, callbackOk, callbackCancel])
or
myApp.prompt(text, [callbackOk, callbackCancel])
- text - string. Prompt 文本/问题
- title - string. Optional. Prompt modal 标题
- callbackOk - function. Optional. 在 Prompt modal下,当用户点击“Ok”按钮时,回调函数将被执行。回调函数的参数是输入框的值
- callbackCancel - function. Optional. 在 Prompt modal下,当用户点击“Cancel”按钮时,回调函数将被执行。回调函数的参数是输入框的值
- 该方法返回动态创建的modal的HTML元素。
- <body>
- ...
- <div class="page-content">
- <div class="content-block">
- <p><a href="#" class="prompt-ok">Prompt with text and Ok callback</a></p>
- <p><a href="#" class="prompt-ok-cancel">Prompt with text, Ok and Cancel callbacks</a></p>
- <p><a href="#" class="prompt-title-ok">Prompt with text, title and Ok callback</a></p>
- <p><a href="#" class="prompt-title-ok-cancel">Prompt with text, title, Ok and Cancel callback</a></p>
- </div>
- </div>
- ...
- </body>
- $$('.prompt-ok').on('click', function () {
- myApp.prompt('What is your name?', function (value) {
- myApp.alert('Your name is "' + value + '". You clicked Ok button');
- });
- });
- $$('.prompt-ok-cancel').on('click', function () {
- myApp.prompt('What is your name?',
- function (value) {
- myApp.alert('Your name is "' + value + '". You clicked Ok button');
- },
- function (value) {
- myApp.alert('Your name is "' + value + '". You clicked Cancel button');
- }
- );
- });
- $$('.prompt-title-ok').on('click', function () {
- myApp.prompt('What is your name?', 'Custom Title', function (value) {
- myApp.alert('Your name is "' + value + '". You clicked Ok button');
- });
- });
- $$('.prompt-title-ok-cancel').on('click', function () {
- myApp.prompt('What is your name?', 'Custom Title',
- function (value) {
- myApp.alert('Your name is "' + value + '". You clicked Ok button');
- },
- function (value) {
- myApp.alert('Your name is "' + value + '". You clicked Cancel button');
- }
- );
- });
Login and Password
有两个用来验证的特殊modals :
myApp.modalLogin(text, [title, callbackOk, callbackCancel])
or
myApp.modalLogin(text, [callbackOk, callbackCancel])
- text - string. Modal 文本
- title - string. 可选. Modal 标题
- callbackOk - function. 可选. 用户点击“确定”按钮时,回调函数将被执行。 回调函数的参数是用户名和密码
- callbackCancel - function. 可选. 当用户点击“取消”按钮时,回调函数将被执行。 回调函数的参数是用户名和密码
- 该方法返回动态创建的modal的HTML元素。
myApp.modalPassword(text, [title, callbackOk, callbackCancel])
or
myApp.modalPassword(text, [callbackOk, callbackCancel])
- text - string. Modal 文本
- title - string. Optional. Modal 标题
- callbackOk - function. Optional. 用户点击“确定”按钮时,回调函数将被执行。 回调函数的参数是用户输入的密码
- callbackCancel - function. Optional. 当用户点击“取消”按钮时,回调函数将被执行。回调函数的参数是用户输入的密码
- <div class="page-content">
- <div class="content-block">
- <p><a href="#" class="login-modal">Login Modal</a></p>
- <p><a href="#" class="password-modal">Password Modal</a></p>
- </div>
- </div>
- var myApp = new Framework7();
- var $$ = Dom7;
- $$('.login-modal').on('click', function () {
- myApp.modalLogin('Authentication required', function (username, password) {
- myApp.alert('Thank you! Username: ' + username + ', Password: ' + password);
- });
- });
- $$('.password-modal').on('click', function () {
- myApp.modalPassword('You password please:', function (password) {
- myApp.alert('Thank you! Your password is: ' + password);
- });
- });
嵌套Modals
当然,您可能已经注意到,你在任何其他modal回调函数中“嵌套“这个modals
- <body>
- ...
- <div class="page-content">
- <div class="content-block">
- <p><a href="#" class="name">What is your name?</a></p>
- </div>
- </div>
- ...
- </body>
- $$('.name').on('click', function () {
- myApp.prompt('What is your name?', function (value) {
- myApp.confirm('Are you sure that your name is ' + value + '?', function () {
- myApp.alert('Ok, your name is "' + value + '"!');
- });
- });
- });
预加载 Modal (Preloader Modal)
预加载 Modal 用来提示一些后台活动(像Ajax请求)和阻止在这个活动期间的任何用户操作。 打开预加载 modal 我们也需要调用适当的App方法:
myApp.show预加载([title]) - 显示 预加载 modal
- title - string. Optional. 预加载 modal 标题. 默认(没有指定)的时候,它等同于 "Loading...". 你可以在App初始化时通过 modal预加载Title 参数改变默认的 预加载 标题。
- 该方法返回动态创建的modal的HTML元素。
myApp.hide预加载() - 隐藏/关闭 预加载 modal. 因为 预加载 modal 没有任何按钮, 它应该用 JavaScript 来关闭
- <body>
- ...
- <div class="page-content">
- <div class="content-block">
- <p><a href="#" class="open-preloader">Open Preloader</a></p>
- <p><a href="#" class="open-preloader-title">Open Preloader with custom title</a></p>
- </div>
- </div>
- ...
- </body>
- $$('.open-preloader').on('click', function () {
- myApp.showPreloader();
- setTimeout(function () {
- myApp.hidePreloader();
- }, 2000);
- });
- $$('.open-preloader-title').on('click', function () {
- myApp.showPreloader('Custom Title')
- setTimeout(function () {
- myApp.hidePreloader();
- }, 2000);
- });
指示器(indicator)
如果你不需要用像预加载Modal这样如此大的modal 窗口去指示活动, 你可以使用简单并且小的指示器modal:
myApp.showIndicator() - 显示指示器 modal
myApp.hideIndicator() - 隐藏/关闭指示器 modal. 因为指示器modal没有任何按钮, 它需要用JavaScript来关闭
- <body>
- ...
- <div class="page-content">
- <div class="content-block">
- <p><a href="#" class="open-indicator">Open Indicator</a></p>
- </div>
- </div>
- ...
- </body>
- $$('.open-indicator').on('click', function () {
- myApp.showIndicator();
- setTimeout(function () {
- myApp.hideIndicator();
- }, 2000);
- });
自定义Modals
Ok, 所有的预定义modals都只是一些适用于特定的场景的方法. 让我们看看如何创建自定义的 modals:
myApp.modal(parameters) - 显示 custom modal
- parameters - object. Modal 的 parameters/options对象
- 该方法返回动态创建的modal的HTML元素。
这里有 Modal 的参数列表:
title | 字符串 | 可选. Modal 标题 (可以是html字符串) | |
text | 字符串 | 可选. Modal 文本 (可以是html字符串) | |
afterText | 字符串 | 可选. 将被放在"text"后的文本 (可以是html字符串) | |
buttons | 数组 | 可选. 按钮数组. 每个按钮应该被表示为带按钮参数的对象 (看下面) | |
verticalButtons | boolean | false | Optional. Set to true to enable vertical buttons layout |
onClick | 函数 | 可选. 回调函数将在用户点击任何Modal按钮后被触发执行. 它接收 modal (Modal的 HTML元素) 和 index作为参数 (被点击按钮的索引号) |
让我们一起来看看按钮参数:
text | 字符串 | 按钮文本 (可以是 HTML 字符串) | |
bold | 布尔值 | false | 可选. 设置为true会加粗按钮文本 |
close | 布尔值 | true | 可选. 如果是“true”,点击这个按钮后modal会被关闭 |
onClick | 函数 | 可选. 用户点击这个按钮后,回调函数会被执行 |
这样的配置选项允许我们创建灵活的modals。让我们来看一些例子:
- <body>
- ...
- <div class="page-content">
- <div class="content-block">
- <p><a href="#" class="open-3-modal">Modal With 3 Buttons</a></p>
- <p><a href="#" class="open-slider-modal">Modal With Slider</a></p>
- <p><a href="#" class="open-tabs-modal">Modal With Tabs</a></p>
- <p><a href="#" class="open-vertical-modal">Modal With Vertical Buttons</a></p>
- </div>
- </div>
- ...
- </body>
- $$('.open-3-modal').on('click', function () {
- myApp.modal({
- title: 'Modal with 3 buttons',
- text: 'Vivamus feugiat diam velit. Maecenas aliquet egestas lacus, eget pretium massa mattis non. Donec volutpat euismod nisl in posuere. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae',
- buttons: [
- {
- text: 'B1',
- onClick: function() {
- myApp.alert('You clicked first button!')
- }
- },
- {
- text: 'B2',
- onClick: function() {
- myApp.alert('You clicked second button!')
- }
- },
- {
- text: 'B3',
- bold: true,
- onClick: function() {
- myApp.alert('You clicked third button!')
- }
- },
- ]
- })
- });
- $$('.open-slider-modal').on('click', function () {
- var modal = myApp.modal({
- title: 'Awesome Photos?',
- text: 'What do you think about my photos?',
- afterText: '<div class="swiper-container" style="width: auto; margin:5px -15px -15px">'+
- '<div class="swiper-pagination"></div>'+
- '<div class="swiper-wrapper">'+
- '<div class="swiper-slide"><img src="..." height="150" style="display:block"></div>' +
- '<div class="swiper-slide"><img src="..." height="150" style="display:block"></div>'+
- '</div>'+
- '</div>',
- buttons: [
- {
- text: 'Bad :('
- },
- {
- text: 'Awesome!',
- bold: true,
- onClick: function () {
- myApp.alert('Thanks! I know you like it!')
- }
- },
- ]
- })
- myApp.swiper($$(modal).find('.swiper-container'), {pagination: '.swiper-pagination'});
- });
- $$('.open-tabs-modal').on('click', function () {
- myApp.modal({
- title: '<div class="buttons-row">'+
- '<a href="#tab1" class="button active tab-link">Tab 1</a>'+
- '<a href="#tab2" class="button tab-link">Tab 2</a>'+
- '</div>',
- text: '<div class="tabs">'+
- '<div class="tab active" id="tab1">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam convallis nunc non dolor euismod feugiat. Sed at sapien nisl. Ut et tincidunt metus. Suspendisse nec risus vel sapien placerat tincidunt. Nunc pulvinar urna tortor.</div>'+
- '<div class="tab" id="tab2">Vivamus feugiat diam velit. Maecenas aliquet egestas lacus, eget pretium massa mattis non. Donec volutpat euismod nisl in posuere. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae</div>'+
- '</div>',
- buttons: [
- {
- text: 'Ok, got it',
- bold: true
- },
- ]
- })
- });
- $$('.open-vertical-modal').on('click', function () {
- myApp.modal({
- title: 'Vertical Buttons Layout',
- text: 'Vivamus feugiat diam velit. Maecenas aliquet egestas lacus, eget pretium massa mattis non. Donec volutpat euismod nisl in posuere. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae',
- verticalButtons: true,
- buttons: [
- {
- text: 'Button 1',
- onClick: function() {
- myApp.alert('You clicked first button!')
- }
- },
- {
- text: 'Button 2',
- onClick: function() {
- myApp.alert('You clicked second button!')
- }
- },
- {
- text: 'Button 3',
- onClick: function() {
- myApp.alert('You clicked third button!')
- }
- },
- ]
- })
- });
用 JavaScript 关闭 Modals
任何 Modal 可以用 JavaScript 来关闭,不仅仅是通过点击按钮。因此我们需要看看相关App方法:
myApp.closeModal(modal) - 关闭任意 modal
- modal - HTMLElement or string ( CSS 选择器). 可选. 除了指定的,任何被打开modal都将被关闭。
Modal 事件
当你在 Modal 打开/关闭时,需要用JavaScript做一些操作时,Modal 事件非常有用
open | Modal Element<div class="modal"> | 当 Modal 开始打开动画时,事件将被触发。 |
opened | Modal Element<div class="modal"> | 当 Modal 完成打开动画时,事件将被触发。 |
close | Modal Element<div class="modal"> | 当 Modal 开始结束动画时,事件将被触发。 |
closed | Modal Element<div class="modal"> | 当 Modal 完成结束动画后,事件将被触发。 |
Modal 模板
如果你希望能自定义 modal 模板,你可在 初始化APP 的时候传入一个 modalTemplate 参数
。这个参数的值是一个 Template7 模板,当编译该模板的时候会传入一个 groups
参数。
这个模板可能是这样的:
- <div class="modal {{#unless buttons}}modal-no-buttons{{/unless}}">
- <div class="modal-inner">
- {{#if title}}
- <div class="modal-title">{{title}}</div>
- {{/if}}
- {{#if text}}
- <div class="modal-text">{{text}}</div>
- {{/if}}
- {{#if afterText}}
- {{afterText}}
- {{/if}}
- </div>
- {{#if buttons}}
- <div class="modal-buttons">
- {{#each buttons}}
- <span class="modal-button {{#if bold}}modal-button-bold{{/if}}">{{text}}</span>
- {{/each}}
- </div>
- {{/if}}
- </div>
相关推荐
在iOS应用开发中,导航栏(Navigation Bar)是用户界面不可或缺的一部分,它为用户提供了一种在应用程序层次结构中导航的方式。本项目“ios-自定义导航栏.zip”提供了一个广泛使用的自定义导航栏实现,旨在帮助...
在iOS应用开发中,导航栏(Navigation Bar)是UI设计中的关键组成部分,它为用户提供了一种在层级结构间导航的方式。Swift是Apple为iOS、iPadOS、watchOS和macOS等平台开发应用的主要编程语言。本教程将详细介绍如何...
Framework7 是免费开源的 HTML 移动端框架,用来开发混合移动端应用或者 iOS 7 的 Web 应用,并且带有 iOS 7 的原生外观和感觉。Framework7 也是独立的原型应用工具。Framework7 使用 Javascript,CSS 和 HTML 来...
资源名称:iOS开发视频教程资源目录:【】iOS开发视频教程-第01讲-iOS历史介绍【】iOS开发视频教程-第02讲-XCode安装【】iOS开发视频教程-第03讲-UIView_PPT【】iOS开发视频教程-第04讲-UILabel【】iOS开发视频教程-...
在iOS应用开发中,导航栏(Navigation Bar)是用户界面不可或缺的一部分,它为用户提供了一种在应用程序中的方向感,展示了当前屏幕的位置,并提供了返回和其他操作的按钮。`ios-移动导航栏.zip` 提供的资源名为 `...
在iOS应用开发中,导航栏(Navigation Bar)是界面设计中的重要组成部分,它为用户提供了一种在层级结构间导航的方式。本项目“ios-自定义导航栏标题切换效果.zip”聚焦于实现导航栏标题在不同页面间的动态切换,...
Framework7是一款免费、开源的移动应用框架,旨在为开发者提供构建iOS和Android应用的全套工具。它提供了丰富的组件库,包括导航、表单、视图、滑块等,使开发者能够轻松实现原生应用的界面和交互效果。 二、Vue.js...
Objective-C是苹果公司开发的一种面向对象的编程语言,广泛应用于MacOS和iOS平台的软件开发。Cocoa是Apple为这两种操作系统提供的原生开发框架,包含了大量用于构建图形用户界面、处理事件、管理文件系统等任务的...
framework7-icons, Framework7的免费iOS图标字体 Framework7图标Framework7的高级和免费ios图标字体。这种字体可以用在 Framework7插件中,但是你可以在任何地方看到它适合它,个人或者商业。 它是免费的使用和许可...
之前遇到的需求,ios上没有类似的实现。搞了好久在网上搜了很多资料都不能解决最后找到了一个c/c++的底层源码,才实现了最后整理了下上传了。是个ios的demo很详细你定能看懂的。运行在xcode环境下,关键算法的文件是...
在iOS开发中,导航栏(NavigationBar)是应用中不可或缺的一部分,它用于展示当前页面的标题以及提供返回和其他操作的按钮。然而,有时候我们可能需要更灵活的导航栏设计,比如在一个页面内展示多个子页面,这在标题...
在iOS开发中,框架(Framework)是包含头文件、库文件和资源的打包结构,用于提供特定功能和服务。本文将深入探讨iOS中的动态库,即Dynamic Framework,它们是如何工作的,以及如何在项目中使用和创建。 动态库与...
本项目“ios-滑动改变导航栏状态.zip”主要展示了如何通过用户滑动屏幕来动态改变导航栏的状态,比如在下拉时放大导航栏中的图片,提供更丰富的交互体验。这个功能常见于新闻阅读、社交媒体等类型的App中,增加用户...
iPhone开发入门到精通视频教程资源目录:【】iOS开发源码系列---工具【】iOS开发源码系列---应用【】iOS开发源码系列---游戏【】iOS开发源码系列---类库与框架【】iOS开发真机测试与发布【】iOS开发视频教程01~05...
2. **组件丰富**:内置了大量的UI组件,如导航栏、侧滑菜单、下拉刷新、滑动切换页面等,这些组件都模仿了iOS和Android原生的交互效果。 3. **触摸优化**:专门针对触摸设备进行了优化,提供了流畅的滑动和手势支持...
在Android应用开发中,创建一个类似iOS QQ底部导航栏的效果是一项常见的需求,它能提供良好的用户体验,让用户在多个页面间轻松切换。这个项目名为"HelloWordFeng-BottomMenu-8972e35",它实现了这样一个功能,并...
提供的【应用】★★★★-iOS framework 制作教程【非静态包】源码示例,应该包含了完整的框架创建过程和相关代码,你可以通过阅读和运行这个项目来加深理解。在实践中,你可以尝试修改源代码,添加新的功能,或者...
在iOS开发中,导航栏(NavigationBar)是应用界面中常见的一种元素,用于展示层级结构并引导用户在不同页面间切换。通常,导航栏是带有标题、返回按钮和其他自定义控件的半透明背景。然而,有时为了实现特殊设计效果...
### UI第一章:无限互联iOS开发教程课件 -- iPhone开发入门 #### iOS系统概述与架构 - **iOS系统**:作为苹果公司专为iPhone、iPod touch及iPad设计的操作系统,iOS自诞生以来就以其简洁易用的特点受到全球用户的...