造成跨域的两种策略
浏览器的同源策略会导致跨域,这里同源策略又分为以下两种
DOM同源策略:禁止对不同源页面DOM进行操作。这里主要场景是iframe跨域的情况,不同域名的iframe是限制互相访问的。
XmlHttpRequest同源策略:禁止使用XHR对象向不同源的服务器地址发起HTTP请求。
只要协议、域名、端口有任何一个不同,都被当作是不同的域,之间的请求就是跨域操作。
Pigs might fly!
/*jQuery.fn = jQuery.prototype = { //添加实例属性和方法
jquery : 版本
constructor : 修正指向问题
init() : 初始化和参数管理
selector : 存储选择字符串
length : this对象的长度
toArray() : 转数组
get() : 转原生集合
<!--more-->
pushStack() : JQ对象的入栈
each() : 遍历集合
ready() : DOM加载的接口
slice() : 集合的截取
first() : 集合的第一项
last() : 集合的最后一项
eq() : 集合的指定项
map() : 返回新集合
end() : 返回集合前一个状态
push() : (内部使用)
sort() : (内部使用)
splice() : (内部使用)
};*/
$.extend()
$.fn.extend()
当只写一个对象自变量的时候,JQ中扩展插件的形式
|
|
当写多个对象自变量的时候 , 后面的对象都是扩展到第一个对象身上
|
|
还可以做 深拷贝(第一个参数为true) 和 浅拷贝(默认)
|
|
源码分析:
|
|
|
|
DOMContentLoaded
看了冴羽大神的JavaScript深入之call和apply的模拟实现有所收获,顺便在此做个总结,首先贴上作者模拟实现的源码,其实看源码就很容易了解call和apply的实现机制。
display: flex;
flex-direction
设置主轴方向为水平方向flex-direction: row;
设置主轴方向为垂直方向flex-direction: column;
设置主轴方向为水平,元素排列为反序flex-direction: row-reverse;
设置主轴方向为垂直,元素排列为反序flex-direction: column-reverse;
####justify-content
元素在主轴开始位置 ,富裕空间在主轴的结束位置justify-content: flex-start;
元素在主轴结束位置,富裕空间在主轴开始位置justify-content: flex-end;
元素在主轴中间,富裕空间在主轴两侧justify-content: center;
富裕空间平均分配在每两个元素之间justify-content: space-between;
富裕空间平均分配在每个元素两侧justify-content: space-around;
align-items
元素在侧轴开始位置,富裕空间在侧轴结束位置align-items: flex-start;
元素在侧轴结束位置,富裕空间在侧轴开始位置align-items: flex-end;
元素在侧轴中间位置,富裕空间在侧轴两侧align-items: center;
根据侧轴方向上文字的基线对齐align-items: baseline;
子级设置 flex-grow
元素的具体位置设置
子级设置 order
display: -webkit-box;
-webkit-box-orient
设置主轴方向为水平方向-webkit-box-orient: horizontal;
设置主轴方向为垂直方向-webkit-box-orient: vertical;
元素在主轴上排列为反序-webkit-box-direction: reverse;
元素在主轴上排列为正序-webkit-box-direction: normal;
元素在主轴的开始位置,富裕空间在主轴的结束位置-webkit-box-pack: start;
-webkit-box-pack
元素在主轴结束位置,富裕空间在主轴开始位置-webkit-box-pack: end;
元素在主轴中间,富裕空间在主轴两侧-webkit-box-pack: center;
富裕空间平均分配在每两个元素之间-webkit-box-pack: justify;
-webkit-box-align
元素在侧轴开始位置,富裕空间在侧轴结束位置-webkit-box-align: start;
元素在侧轴结束位置,富裕空间在侧轴开始位置-webkit-box-align: end;
元素在侧轴中间位置,富裕空间在侧轴两侧-webkit-box-align: center;
子级设置 -webkit-box-flex
元素的具体位置设置
子级设置 -webkit-box-ordinal-group
viewport设置
避免IE使用兼容模式
|
|
uc强制竖屏
|
|
QQ强制竖屏
|
|
UC强制全屏
|
|
QQ强制全屏
|
|
禁止识别电话号码
|
|
禁止识别邮箱号码
|
|
防止地址跳转到地图
|
|
防止日期被显示成别的格式
|
|
拨打电话和发邮件
|
|
|
|
|
|
iOS 浏览器横屏时会重置字体大小
|
|
|
|
在一段文字没有给其设置高度的时候在webkit内核下文字的大小被浏览器放大 参考
Fixed 兼容问题
IOS的body的overflow问题(加overflow:hidden
横向仍可以滚动)
语法:transition: property duration timing-function delay;
transition-property
(all || [attr] || none)
属性规定应用过渡效果的 CSS 属性的名称。(当指定的 CSS 属性改变时,过渡效果将开始)。
提示:过渡效果通常在用户将鼠标指针浮动到元素上时发生。
transition-duration
规定完成过渡效果需要花费的时间(以秒或毫秒计)
注:请始终设置 transition-duration 属性,否则时长为 0,就不会产生过渡效果。
transition-timing-function
属性规定过渡效果的速度曲线。该属性允许过渡效果随着时间来改变其速度。
—— ease:(逐渐变慢)默认值
—— linear:(匀速)
—— ease-in:(加速)
—— ease-out:(减速)
—— ease-in-out:(先加速后减速)
—— cubic-bezier 贝塞尔曲线( x1, y1, x2, y2 )transition-delay
规定过渡效果何时开始,值以秒或毫秒计。
Webkit内核: obj.addEventListener('webkitTransitionEnd',function(){},false);
firefox: obj.addEventListener('transitionend',function(){},false);
rotate(<angle>)
旋转函数 取值度数(deg度数)
skew(<angle>[,<angle>])
倾斜函数 取值度数
该函数包含两个参数,分别用来定义X轴Y轴的坐标倾斜角度。
—— skewX()
—— skewY()
scale(<number>[,<number>])
缩放函数 取值 正数、负数和小数
该函数包含两个参数,分别用来定义宽和高的缩放比例,如果第二个参数省略则第二个参数等于第一个参数。
translate(<translation-value>[,<translation-value>])
位移函数
该函数包含两个参数,分别用来定义X轴和Y轴的坐标。
—— translateX()
—— translateY()
Transform-origin
旋转的基点
初始值为”50% 50%”,接受两个参数,它们可以是百分比、em、px等具体值,也可以是left、center、right或者top、middle、bottom等描述性关键字
2D 转换元素能够改变元素 x 和 y 轴。3D 转换元素还能改变其 Z 轴。
该属性必须与 transform 属性一同使用。
语法transform-origin: x-axis y-axis z-axis;
Transform 执行顺序问题 — 后写先执行
matrix(a,b,c,d,e,f)
矩阵函数
通过矩阵实现缩放
x轴缩放
a=x*a c=x*c e=x*e
;
y轴缩放b=y*b d=y*d f=y*f
;
通过矩阵实现位移
x轴位移:
e=e+x
y轴位移:f=f+y
通过矩阵实现倾斜
x轴倾斜:
c=Math.tan(xDeg/180*Math.PI)
y轴倾斜:b=Math.tan(yDeg/180*Math.PI)
matrix(a,b,c,d,e,f) 矩阵函数
通过矩阵实现旋转
—— a=Math.cos(deg/180*Math.PI)
;
—— b=Math.sin(deg/180*Math.PI)
;
—— c=-Math.sin(deg/180*Math.PI)
;
—— d=Math.cos(deg/180*Math.PI)
;
变换兼容IE9以下IE版本只能通过矩阵来实现
filter: progid:DXImageTransform.Microsoft.Matrix( M11= 1, M12= 0, M21= 0 , M22=1,SizingMethod='auto expand');
IE下的矩阵没有E和F两个参数 M11==a; M12==c; M21==b; M22==d
transform-style(preserve-3d)
建立3D空间
规定如何在 3D 空间中呈现被嵌套的元素,该属性必须与 transform 属性一同使用。
语法:transform-style: flat|preserve-3d;
Perspective
景深
目前浏览器都不支持 perspective 属性。Chrome 和 Safari 支持替代的
-webkit-perspective
属性。
语法:perspective: number|none;
Perspective- origin 景深基点
目前浏览器都不支持
perspective-origin
属性。Chrome 和 Safari 支持替代的-webkit-perspecitve-origin
属性。
Transform 新增函数
—— rotateX()
—— rotateY()
—— rotateZ()
—— translateZ()
—— scaleZ()
animation
语法:animation: name duration timing-function delay iteration-count direction;
注:请始终规定 animation-duration 属性,否则时长为 0,就不会播放动画了。
关键帧——keyFrames
类似于flash:只需指明两个状态,之间的过程由计算机自动计算
关键帧的时间单位
—— 数字:0%、25%、100%等
—— 字符:from(0%)、to(100%)
注:为了获得最佳的浏览器支持,您应该始终定义 0% 和 100% 选择器。请使用动画属性来控制动画的外观,同时将动画与选择器绑定。
格式(1)
@keyframes 动画名称
{
动画状态
}
栗子:
@-webkit-keyframes move
{
0%{
width:100px;
}
100%
{
width:500px;
}
}
调用:
animation:2s move;
格式(2)
@keyframes miaov_test
{
from { background:red; }
to { background:green; }
}
可以只有to
调用的标签(#div1、xxx:hover之类的)
必要属性
—— animation-name
动画名称(关键帧名称)
—— animation-duration
动画持续时间
例如:
-webkit-animation-name: ‘miaov';
-webkit-animation-duration: 4s;
animation-play-state
播放状态( running 播放 和paused 暂停 )
可选属性animation-timing-function
动画运动形式
—— linear 匀速。
—— ease 缓冲。
—— ease-in 由慢到快。
—— ease-out 由快到慢。
—— ease-in-out 由慢到快再到慢。
—— cubic-bezier(number, number, number, number): 特定的贝塞尔曲线类型,4个数值需在[0, 1]区间内
animation-delay
动画延迟
—— 只是第一次animation-iteration-count
重复次数
—— infinite为无限次animation-direction
播放前重置
—— 动画是否重置后再开始播放
—— alternate 动画直接从上一次停止的位置开始执行
—— normal 动画第二次直接跳到0%的状态开始执行
通过class
—— 在class里加入animation的各种属性
—— 直接给元素加-webkit-animation-xxx样式
animation的问题
—— 写起来麻烦
—— 没法动态改变目标点位置obj.addEventListener('webkitAnimationEnd', function (){}, false);