amazeui学习笔记--js插件(UI增强)--警告框Alert
amazeui学习笔记--js插件(UI增强)--警告框Alert
一、总结
1、警告框基本样式:用am-alert声明div容器,
<div class="am-alert">
没什么可给你,但求凭这阙歌。谢谢你风雨里,都不退愿陪着我。
</div>
2、警告框关闭按钮:data-am-alert应该是js事件,因为点击后面的关闭按钮真的可以关闭掉
<div class="am-alert" data-am-alert>
<button type="button" class="am-close">×</button>
<p>没什么可给你,但求凭这阙歌。谢谢你风雨里,都不退愿陪着我。</p>
</div>
3、不同状态(颜色):am-alert-warning,还是之前几种颜色,只不过现在是用alert做模块名,
<div class="am-alert am-alert-warning" data-am-alert>警告框内容</div>
4、通过data API调用警告框:在 Alert 最外层元素上添加 data-am-alert
。
<div class="am-alert" data-am-alert>
<button type="button" class="am-close">×</button>
...
</div>
5、通过js开启关闭按钮交换功能: $('.am-alert').alert()
$().alert()
- 激活 Alert 元素关闭按钮的交互功能。$().alert('close')
:直接关闭元素。
事件名称 | 描述 |
---|---|
close.alert.amui |
close 方法被调用时立即触发 |
closed.alert.amui |
元素被关闭以后触发(CSS 动画执行完成) |
$('#my-alert').on('closed.alert.amui', function() {
alert('警告窗口已经关闭');
});
二、警告框Alert
JavaScript
基本使用
基于 jQuery
从 2.0 开始,Amaze UI JavaScript 组件转向基于 jQuery 开发,使用时确保在 Amaze UI 的脚本之前引入了 jQuery 最新正式版。
组件调用
组件的调用方式普通 jQuery 插件一样,具体细节请查看各个组件的文档。
jQuery 和 Zepto.js 的一些差异
jQuery 和 Zepto.js 表面看起来差不多,其实一些细节上差异很大,同时支持 jQuery 和 Zepto.js 是一件吃力不讨好的事情,这应该也是 Foundation 5 放弃支持 Zepto 的一个原因。(下面列举的差异 Demo)
width()
/height()
- Zepto.js: 由盒模型(
box-sizing
)决定 - jQuery: 忽略盒模型,始终返回内容区域的宽/高(不包含
padding
、border
)
jQuery 官方的说明:
Note that
.width()
will always return the content width, regardless of the value of the CSSbox-sizing
property. As of jQuery 1.8, this may require retrieving the CSS width plusbox-sizing
property and then subtracting any potential border and padding on each element when the element hasbox-sizing: border-box
. To avoid this penalty, use.css("width")
rather than.width()
.
解决方式就是在 jQuery 中使用 .css('width')
,而不是 .width()
。
这点上 jQuery 的处理方式是值得商榷的,比如下面的例子,$('.box').css('height')
仍然返回 20px
,这不是扯蛋么:
<style>
.box {
box-sizing: border-box;
padding: 10px;
height: 0;
}
</style>
<div class="box"></div>
边框三角形宽高的获取
假设用下面的 HTML 和 CSS 画了一个小三角形:
<div class="caret"></div>
.caret {
width: 0;
height: 0;
border-width: 0 20px 20px;
border-color: transparent transparent blue;
border-style: none dotted solid;
}
- jQuery 使用
.width()
和.css('width')
都返回0
,高度也一样; - Zepto 使用
.width()
返回40
,使用.css('width')
返回0px
。
所以,这种场景,jQuery 使用 .outerWidth()
/.outerHeight()
;Zepto 使用 .width()
/.height()
。
offset()
- Zepto.js: 返回
top
、left
、width
、height
- jQuery: 返回
width
、height
$(htmlString, attributes)
DOM 操作区别
$(function() {
var $list = $('<ul><li>jQuery 插入</li></ul>', {
id: 'insert-by-jquery'
});
$list.appendTo($('body'));
});
jQuery 操作 ul
上的 id
不会被添加;Zepto 可以在 ul
上添加 id
。
事件触发区别
$script = $('<script />', {
src: 'http://cdn.amazeui.org/amazeui/1.0.1/js/amazeui.min.js',
id: 'ui-jquery'
});
$script.appendTo($('body'));
$script.on('load', function() {
console.log('jQ script loaded');
});
使用 jQuery 时 load
事件的处理函数不会执行;使用 Zepto 时 load
事件的处理函数会执行。
其他参考链接:
高级使用
默认初始化事件接口
Amaze UI 通过特定的 HTML 来绑定事件,多数 JS 组件通过 HTML 标记就可以实现调用。
默认的初始化事件都在 xx.amui.data-api
命名空间下,用户可以自行关闭。
关闭所有默认事件:
$(document).off('.data-api');
关闭特定组件的默认事件:
$(document).off('.modal.amui.data-api');
自定义事件
一些组件提供了自定义事件,命名的方式为 {事件名称}.{组件名称}.amui
,用户可以查看组件文档了解、使用这些事件。
$('#myAlert').on('close.alert.amui', function() {
// do something
});
MutationObserver
双向数据绑定很酷?Mutation Observer 才是(或即将成为)幕后的英雄。
Amaze UI 2.1 中实验性地引入了 MutationObserver
,请谨慎使用。
data-am-observe
在元素上添加 data-am-observe
属性以后,动态插入该元素的 Amaze UI JS 插件会自动初始化(演示), 支持的插件包括 Button、Dropdown、Slider、Popover、ScrollSpy、Tabs。
$().DOMObserve(options, callback)
options
: 监视的属性(具体参见),默认为{childList: true, subtree: true}
;callback(mutations, observer)
: DOM 发生变化时的处理函数,第一个参数为存储 MutationRecord 对象的数组,第二个参数为 MutationObserver 实例本身。
插入 p 元素 添加 Class 移除 p 元素
DOM 变化监视演示,打开控制台查看 log
<p id="js-do-actions">
<button class="am-btn am-btn-primary" data-insert>插入 p 元素</button>
<button class="am-btn am-btn-secondary" data-addClass>添加 Class</button>
<button class="am-btn am-btn-warning" data-remove>移除 p 元素</button>
</p>
<div id="js-do-demo">
<p>DOM 变化监视演示,打开控制台查看 log</p>
</div>
<script>
$(function() {
var $wrapper = $('#js-do-demo');
$wrapper.DOMObserve({
childList: true,
attributes: true,
subtree: true
}, function(mutations, observer) {
console.log(observer.constructor === window.MutationObserver);
console.log('#js-do-demo 的 DOM 发生变化鸟:' + mutations[0].type);
});
$('#js-do-actions').find('button').on('click', function(e) {
var $t = $(e.target);
if ($t.is('[data-insert]')) {
$wrapper.append('<p>插入了一个 p</p>');
} else if($t.is('[data-remove]')) {
$wrapper.find('p').last().remove();
} else {
$wrapper.addClass('am-text-danger');
}
});
})
</script>
参考链接:
模块化开发
关于前端模块化,Amaze UI 1.0 的时候曾做过一个关于前端 JS 模块化的调查,截止 2014.11.13 共 1869 个投票:
- CMD - Sea.js 23.86% (446 votes)
- AMD - RequireJS 24.51% (458 votes)
- CommonJS - Browserify 9.58% (179 votes)
- 其他加载工具(或者自行开发的) 8.19% (153 votes)
- 什么是 JS 模块化?可以吃吗? 34% (633 votes)
显然,模块化是必然趋势,ES6 将原生支持模块化。
Amaze UI 2.0 按照 CommonJS 规范来组织模块(前端也像 Node.js 一样编写模块)。最终如何打包,用户可以自行选择。
- Browserify:结合 NPM,实现前端模块管理。很多前端模块都已经发布到 NPM,可以抛弃 Bower 这类功能很单一的工具了;
- Duo:除管理本地模块以外,还可以从 GitHub 上直接获取开源项目,支持 Javascript、HTML、CSS;
- gulp-amd-bundler:把按照 CJS 编写的模块打包成 AMD 模块;
- Webpack。
SPM 貌似不支持直接通过源码提取依赖,使用 Sea.js 的用户可能需要自行修改打包工具。
建议阅读的文章:
amazeui学习笔记--js插件(UI增强)--警告框Alert的更多相关文章
- amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown
amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown 一.总结 1.am-dropdown(及其孩子):控制下拉列表的样式 2.data-am-dropdown(及其孩子):控 ...
- amazeui学习笔记--js插件(UI增强3)--折叠面板Collapse
amazeui学习笔记--js插件(UI增强3)--折叠面板Collapse 一.总结 注意点: 1.data-am-collapse:这个东西就是展开折叠事件 2.am-collapse(包括其下属 ...
- amazeui学习笔记--js插件(UI增强2)--按钮交互Button
amazeui学习笔记--js插件(UI增强2)--按钮交互Button 一.总结 1.按钮loading状态: <button type="button" class=&q ...
- Bootstrap入门(三十)JS插件7:警告框
Bootstrap入门(三十)JS插件7:警告框 通过这个插件可以为警告信息添加点击以及消失的功能. 当使用一个.close按钮,它必须是第一个子元素.alert-dismissible,并没有文字内 ...
- amazeui中的js插件有哪些(详解功能)
amazeui中的js插件有哪些(详解功能) 一.总结 一句话总结: 二.amazeui中的js插件有哪些 1.UI 增强 警告框Alert 按钮交互Button 折叠面板Collapse 下拉组件D ...
- amazeui学习笔记二(进阶开发1)--项目结构structure
amazeui学习笔记二(进阶开发1)--项目结构structure 一.总结 1.项目结构:是说的amazeui在github上面的项目结构,二次开发amazeui用 二.项目结构structure ...
- amazeui学习笔记一(开始使用3)--兼容性列表compatibility
amazeui学习笔记一(开始使用3)--兼容性列表compatibility 一.总结 1.不要用ie做前端测试,不要碰ie,尽量用google 浏览器: 按照微软官方的说法,IE 开发者工具中的浏 ...
- amazeui学习笔记三(你来我往1)--常见问题FAQs
amazeui学习笔记三(你来我往1)--常见问题FAQs 一.总结 1.DOM事件失败:记得加上初始化代码,例如 图片轮播 $('#my-slider').flexslider(); 2.jquer ...
- amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules
amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...
随机推荐
- 【Codeforces Round #424 (Div. 2) A】Unimodal Array
[Link]:http://codeforces.com/contest/831/problem/A [Description] 让你判断一个数列是不是这样一个数列: 一开始是严格上升 然后开始全都是 ...
- ios开发之-计算器的改进
#import <Foundation/Foundation.h> extern double add(double x,double y); extern double subtract ...
- 设计模式之Build(生成者模式)
一.生成器模式的定义: 生成器模式也称为建造者模式.生成器模式的意图在于将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示(GoF).在软件设计中,有时候面临着一个非常复杂的对象的创 ...
- js--- 堆栈 于拷贝
1.栈(stack)和堆(heap) stack为自动分配的内存空间,它由系统自动释放:而heap则是动态分配的内存,大小不定也不会自动释放. 2.基本类型和引用类型 基本类型:存放在栈内存中的简单数 ...
- 基于Linux平台Softimage XSI 演示
2009年底上映的<阿凡达>是电影特效的巅峰之作,就在本月初上映的变形金刚3每次观看之后看得眼花缭乱总能让我热血沸腾,要是自己能做出那样的特效该多好,Linux下研究Maya已经有一段日 ...
- 什么是事件委托?jquery和js怎么去实现?
事件委托又叫事件代理,事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件. js: window.onload = function(){ var oul = docume ...
- host---域名查询
host命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常. 选项 -a:显示详细的DNS信息: -c<类型>:指定查询类型,默认值为“IN“: -C:查询指定主机的完整的SO ...
- Mysql学习总结(17)——MySQL数据库表设计优化
1.选择优化的数据类型 MySQL支持很多种不同的数据类型,并且选择正确的数据类型对于获得高性能至关重要.不管选择何种类型,下面的简单原则都会有助于做出更好的选择: (1).更小通常更好 一般来说,要 ...
- 解决xorm逆向mssql报datetime2不兼容的异常错误
xorm作为golang开发者的一大利器,深受大家的喜爱,可是最近在逆向mssql的时候,报了这么一个错误: 最后找了半天发现xorm没有预置DateTime2类型,经过几番折腾,在xorm源码的en ...
- emacs 为什么找不到运行程序?
我记得前段时间有个朋友问我为什么在emacs中打不开matlab程序?明明在terminal下是能打开的,却在emacs中不行. 今天自己最终遇到了相似的问题,我今天安装racket 6.0.安装好后 ...