polymer web componets 大前端
大前端
东南水乡 一叶小舟拂过水面 船上两位大侠把酒言欢 一位是玉真人 另一位是张真人 两人喝到开心处 变作对联起来 上联 前端研究,研究个屁~ 下联 前端设计,设计个屁~ 横批 前端sb
特色
polymer 提供创建自定义和标准dom元素类似的自定义元素功能
可以使用constructor或者document.createElement创建元素
可以配置元素attributes或properties
可以在标签内部定义一些dom
可以对属性和属性的变化处理
可以有一些默认的样式,在外部修内部样式
可以提供方法允许你来操纵它的内部状态
一个基本的polymer元素定义如下:
<dom-module id="element-name"><style>/* CSS rules for your element */</style><template><!-- local DOM for your element --><div>{{greeting}}</div> <!-- data bindings in local DOM --></template>
</dom-module><script>// element registrationPolymer({is: "element-name",// add properties and methods on the element's prototypeproperties: {// declare properties for the element's public APIgreeting: {type: String,value: "Hello!"}}});
</script>
像普通标签一样使用
<element-name></element-name> <!-- <div>hello!</div> -->
注册和生命周期
注册自定义元素
使用polymer注册一个元素,使用is属性指明要注册元素的名称
// register an element
MyElement = Polymer({is: 'my-element',// See below for lifecycle callbackscreated: function() {this.innerHTML = 'My element!';}});// create an instance with createElement:
var el1 = document.createElement('my-element');// ... or with the constructor:
var el2 = new MyElement();
polymer function 将元素注册到浏览器上 并且 返回一个创建新实例的元素构造函数
定义一个自定义构造函数
polymer function返回一个基本的构造函数,可用于实例化自定义元素,如果你想要向构造函数传递参数配置新元素,您可以指定一个自定义构造函数原型。
MyElement = Polymer({is: 'my-element',constructor: function(foo, bar) {this.foo = foo;this.configureWithBar(bar);},configureWithBar: function(bar) {...}});var el = new MyElement(42, 'octopus');
自定义函数只当使用构造函数时调用,作为html标记解析时不调用
自定义函数在元素初始化后调用
扩展html元素
MyInput = Polymer({is: 'my-input',extends: 'input',created: function() {this.style.border = '1px solid red';}});var el1 = new MyInput();
console.log(el1 instanceof HTMLInputElement); // truevar el2 = document.createElement('input', 'my-input');
console.log(el2 instanceof HTMLInputElement); // true
回调生命周期
MyElement = Polymer({is: 'my-element',created: function() {console.log(this.localName + '#' + this.id + ' was created');},attached: function() {console.log(this.localName + '#' + this.id + ' was attached');},detached: function() {console.log(this.localName + '#' + this.id + ' was detached');},attributeChanged: function(name, type) {console.log(this.localName + '#' + this.id + ' attribute ' + name +' was changed to ' + this.getAttribute(name));}});
准备回调和元素初始化
ready: function() {<!-- access a local DOM element by ID using this.$ -->this.$.header.textContent = 'Hello!';
}
元素初始化顺序
created callback
local DOM constructed
default values set
ready callback
custom constructor (if any)
attached callback
注册回调
Polymer.Base also implements registerCallback, which is called by Polymer() to allow Polymer.Base to supply a layering system for Polymer features.
标签静态属性
如果一个自定义标签需要标签上出现attributes要在hostAttrbuites下写 值为true会被转变为空
false 该属性不会添加
mixins属性
fun-mixin.html
FunMixin = {funCreatedCallback: function() {this.makeElementFun();},makeElementFun: function() {this.style.border = 'border: 20px dotted fuchsia;';}};});
my-element.html
<link rel="import" href="fun-mixin.html"><script>Polymer({is: 'my-element',mixins: [FunMixin],created: function() {this.funCreatedCallback();}});
</script>
类样式的构造函数
如果你想实现你的元素,但并不注册他,你可以使用Polymer.class function Polymer.class和Polymer有着相同的属性配置,设置原型链,没有注册元素,可以用document.registerElement 注册。
申明属性
你可以在你的元素上声明有哪些properties通过在polymer构造函数原型properties写
可以声明那些配置
属性类型
默认值
属性改变观察者
只读
出发事件
基于别的属性计算属性
属性值改变时跟新相关
Polymer({is: 'x-custom',properties: {user: String,isHappy: Boolean,count: {type: Number,readOnly: true,notify: true}},ready: function() {this.innerHTML = 'Hello World, I am a <b>Custom Element!</b>';}});
key | details |
---|---|
type | (Boolean,Date,Number,String,Array,Object) |
value | (Boolean,Number,String,Function) 默认值 |
reflectToAttribute | (Boolean) |
readyOnly | (Boolean) |
notify | (Boolean) |
computed | (String) |
observer | (String) 属性观察者函数名 |
property name 和 attribute name 映射
当映射 attribute name 到 property names
attribute names 转换成 小写 property names 比如firstName 映射成 firstname
attribute names 带破折号 转换成 驼峰命名 property namses 比如first-name 映射成
firstName
property names 映射成 attribute names时一致
反序列化属性
属性最好设置type
<script>Polymer({is: 'x-custom',properties: {user: String,manager: {type: Boolean,notify: true}},attached: function() {// renderthis.innerHTML = 'Hello World, my user is ' + (this.user || 'nobody') + '.\n' +'This user is ' + (this.manager ? '' : 'not') + ' a manager.';}});</script><x-custom user="Scott" manager></x-custom>
<!--
<x-custom>'s innerHTML becomes:
Hello World, my user is Scott.
This user is a manager.
-->
attributes dash-case 风格 转换成 camel-case 风格
<script>Polymer({is: 'x-custom',properties: {userName: String}});</script><x-custom user-name="Scott"></x-custom>
<!-- Sets <x-custom>.userName = 'Scott'; -->
配置默认属性值
properties 的默认值可以再properties对象使用value属性 可以是一个原始值或者一个function的返回值
Polymer({is: 'x-custom',properties: {mode: {type: String,value: 'auto'},data: {type: Object,notify: true,value: function() { return {}; }}}});
属性更改回调(观察者)
Polymer({is: 'x-custom',properties: {disabled: {type: Boolean,observer: 'disabledChanged'},highlight: {observer: 'highlightChanged'}},disabledChanged: function(newValue, oldValue) {this.toggleClass('disabled', newValue);this.highlight = true;},highlightChanged: function() {this.classList.add('highlight');setTimeout(function() {this.classList.remove('highlight');}, 300);}});
观察多个属性更改
Polymer({is: 'x-custom',properties: {preload: Boolean,src: String,size: String},observers: {'preload src size': 'updateImage'},updateImage: function(preload, src, size) {// ... do work using dependent values}});
观察更改子属性
local Dom
我们叫把可以创造和管理的dom叫local dom
polymer支持创建multiple local dom 在支持shadow dom的浏览器上 shadow dom用来创建local dom
在其他浏览器 polymer通过自定义实现的shadow dom提供local dom
local dom template
使用<dom-module>元素表现local <dom-module>的id元素对应元素 is property在dom-module内 放置<template> polymer会自动拷贝模板内容为元素的local dom
<dom-module id="x-foo"><template>I am x-foo!</template>
</dom-module><script>Polymer({is: 'x-foo'});
</script>
scoped styling
<dom-module id="my-element"><style>:host {display: block;border: 1px solid red;}#child-element {background: yellow;}/* styling elements distributed to content (via ::content) requires *//* using a wrapper element for compatibility with shady DOM */.content-wrapper > ::content .special {background: orange;}</style><template><div id="child-element">In local Dom!</div><div class="content-wrapper"><content></content></div></template></dom-module><script>Polymer({is: 'my-element'});</script>
Styling distributed children (::content)
在这个例子,这个规则
.content-wrapper ::content > .special
翻译为
.content-wrapper > special
Automatic node finding
内部元素使用id声明 使用this.$ hash选择
DOM (re-)distribution
polymer web componets 大前端相关推荐
- 【Java全栈】Java全栈学习路线及项目全资料总结【JavaSE+Web基础+大前端进阶+SSM+微服务+Linux+JavaEE】
目录 jdk api 1.8中文版 jdk api 1.8_google.CHM 零:Java 全栈知识体系 第一阶段:JavaSE 一,程序应用(★★) 二,面向对象程序设计基础(★★★) 面向对象 ...
- 02.Web大前端时代之:HTML5+CSS3入门系列~H5结构元素
Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 1.结构元素 可以理解为语义话标记,比如:以前这么写&l ...
- 04. Web大前端时代之:HTML5+CSS3入门系列~HTML5 表单
Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 一.input新增类型: 1.tel:输入类型用于应该包 ...
- 大前端时代的乱流:带你了解最全面的 Flutter Web
Flutter Web 稳定版本发布至今也有一年多了,经过这一年多的发展,今天就让我们来看看作为大前端时代的乱流,Flutter Web 究竟有什么不同之处,本篇分享主要内容是目前 Flutter 下 ...
- 如何使用 WEB 技术编写前端代码,实现大屏展示和地图显示功能
使用 WEB 技术编写前端代码实现大屏展示和地图显示功能可以采用以下步骤: 使用 HTML.CSS.JavaScript 等前端技术构建页面布局和样式. 使用 JavaScript 库或框架,如 jQ ...
- 好程序员大前端送干货Web前端开发框架汇总
好程序员大前端送干货Web前端开发框架汇总,其实一个前端开发框架其实就是一系列产品化的HTML/CSS/JavaScript组件的集合,我们可以在设计中使用它们.前端开发框架有很多,其中有一些写得很棒 ...
- 【JAVA企业级开发】浅谈关于在WEB大前端已然降临的时代中,你是否还是在学习jsp、freemarker、velocity、themleaf等模板引擎么?
这里写目录标题 一级目录 二级目录 三级目录 一在java领域,表现层技术主要有四种:`jsp.freemarker.velocity,themleaf` 1jsp是大家最熟悉的技术 2velocit ...
- 自如大前端-web动画探索(一)
前端项目直面客户,为了更好的交互体验,免不了需要使用动画来增香提味.在此分享自如动画的尝试与探索. 一.简单的过渡效果transition 使用transition实现:位移.旋转.缩放.透明度等简单 ...
- 2019 年web大前端技术趋势分析
一晃眼 2019 年已过大半,年初信誓旦旦要学习新技能的小伙伴们立的 flag 都完成的怎样了?2019 年对于大前端技术领域而言变化不算太大,目前三大技术框架日趋成熟,短期内不大可能出现颠覆性的前端 ...
最新文章
- Postman 调试技巧
- python框架实例_Python之Flask框架项目Demo入门
- 代码组织和部署 文件操作 node.js
- windows dos命令窗口的环境变量
- 指针数组的初始化和遍历,并且通过for循环方式、函数传参方式进行指针数组的遍历...
- 前端每周清单第 30 期:WebVR 指南,Vue 代码分割范式,理想的 React 架构特性
- Theano 中文文档 0.9 - 5.1 Ubuntu安装说明
- java爬虫入门--用jsoup爬取汽车之家的新闻
- html select 事件 jquery,通过jquery触发select自身的change事件
- 软件系统分析与设计考试重点、复习指导及复习笔记汇总
- 转载 :Labview和G语言
- Ubuntu下安装配置Honeyd蜜罐
- 中国共享汽车行业需求状况及发展前景预测报告(新版)2022-2027年
- 语法基础课——第二讲 习题
- 卖动感单车能帮助keep走出变现困境吗?
- 基于Android+机智云的室内植物墙智能控制系统
- 在windows和linux上传或下载文件
- 知乎高赞,如何系统地学习算法?
- 2022-2028全球与中国药房管理系统市场现状及未来发展趋势
- 图像畸变(几何失真)测试—imatest