富贵资源网 Design By www.hznty.com
使用该程序能实现很多常见的动画特效,包括大小变换、位置变换、渐显渐隐等等。
程序说明: 渐变效果的原理就是利用定时器不断设置值,如果要减速效果就设置一个步长(详细看JavaScript 弹簧效果) 。
这里只是把能渐变的属性(透明度、宽、高、left、top)整合在一起,使用相同的渐变级数(Step)使渐变同步,形成多个属性同时渐变的效果。
下面说说有用的地方:
【最终样式】
在JavaScript 图片切割效果的边宽获取中也说到了最终样式,在使用offset获取的数据设置宽度高度的时候,必须先减去最终样式中的边框宽度。
在这里我使用了muxrwc的在FF下实现currentStyle方法,这样在ff和ie都可以从currentStyle获取最终样式了:
复制代码 代码如下:
if(!isIE){
HTMLElement.prototype.__defineGetter__("currentStyle", function () {
return this.ownerDocument.defaultView.getComputedStyle(this, null);
});
}
使用这个获取边框宽度:
复制代码 代码如下:
this._xBorder = function(){ return (parseInt(obj.currentStyle.borderLeftWidth) + parseInt(obj.currentStyle.borderRightWidth)); }
this._yBorder = function(){ return (parseInt(obj.currentStyle.borderTopWidth) + parseInt(obj.currentStyle.borderBottomWidth)); }
【宽度或高度优先】
宽度或高度优先其实就是先执行其中一个渐变,在完成后再执行另一个渐变。
渐变程序中在执行完一次渐变之后会返回一个bool值表示是否渐变完成,利用这个可以这样:
复制代码 代码如下:
this.SetWidth() && this.SetHeight();
由于&&的特性,当this.SetWidth()返回true时才会去执行this.SetHeight(),这也是不错的技巧。
同时为了同步渐变,另外的渐变使用了两倍的步长:
复制代码 代码如下:
this.Step = 2*this.Step;
this.SetOpacity(); this.SetTop(); this.SetLeft();
this.Step = this.Step/2;
这样就能做出宽度或高度优先的效果了。
【定点渐变】
先说说原理,例如以宽度中点为参照点,可以想象如果宽度减少n,那只要left相对增加n*0.5(即n/2),
那么就可以做出以中点为中心变换的效果(当然要先把变换对象设为相对或绝对定位)。
那这个“0.5”怎么来的呢?有点数理知识应该知道就是渐变对象左边到变换点跟渐变对象总宽度的比
程序里用Width.pos保存这个值,在变换前先计算好变换点的位置:
this._x = this._obj.offsetLeft + this._obj.offsetWidth * this.Width.pos;
每次变换都根据这个位置和宽度来重新设置left:
this._obj.style.left = this._x - this._obj.offsetWidth * this.Width.pos + "px";
可能有人会说直接在原有left基础上加上变换宽度*Width.pos不是一样吗?
但问题是经过多次的变换计算(到达目标值前会有多次计算)之后得到的值已经不准确了。
因为在变换计算过程中很多小数会被忽略,随着计算次数增多结果的出入也越大,
所以先定好变换位置参照值(_x),这样不论经过多少次计算变换位置都不会走位了。
同理只要设置不同的Width.pos(包括负数和大于1的数)和Height.pos就可以以任意点为中心渐变了。
还有就是程序的设计也花了不少心思,为了提高整合度,做了一个FadeStruct的结构,其中run、start、end、target属性分别是是否渐变、开始值、结束值、目标值。
用了两次的Object.extend来设置默认值,详细可以看程序。
使用说明:
必要的参数只有一个,就是渐变对象,不过只有渐变对象是没有效果的,必须设置其他属性:
Opacity:透明渐变参数
Height:高度渐变参数
Width:宽度渐变参数
Top:Top渐变参数
Left:Left渐变参数
Step:10,//变化率
Time:10,//变化间隔
Mode:"both",//渐变顺序
Show:false,//是否默认打开状态
onFinish:function(){}//完成时执行
其中Opacity、Height、Width、Top、Left比较特别,是FadeStruct结构
例子里实例化这个对象:
复制代码 代码如下:
var f = new Fade("idFade", { Show: true,
Opacity: { run: true },
Height: { run: true },
Width: { run: true, pos: .5 },
Top: { run: true, end: 70 }
});
设置run为true就表示开启这个变换,start和end是开始和结束值,pos是Height和Width特有的变换位置属性。
更详细的应用可以看实例。
12下一页阅读全文
程序说明: 渐变效果的原理就是利用定时器不断设置值,如果要减速效果就设置一个步长(详细看JavaScript 弹簧效果) 。
这里只是把能渐变的属性(透明度、宽、高、left、top)整合在一起,使用相同的渐变级数(Step)使渐变同步,形成多个属性同时渐变的效果。
下面说说有用的地方:
【最终样式】
在JavaScript 图片切割效果的边宽获取中也说到了最终样式,在使用offset获取的数据设置宽度高度的时候,必须先减去最终样式中的边框宽度。
在这里我使用了muxrwc的在FF下实现currentStyle方法,这样在ff和ie都可以从currentStyle获取最终样式了:
复制代码 代码如下:
if(!isIE){
HTMLElement.prototype.__defineGetter__("currentStyle", function () {
return this.ownerDocument.defaultView.getComputedStyle(this, null);
});
}
使用这个获取边框宽度:
复制代码 代码如下:
this._xBorder = function(){ return (parseInt(obj.currentStyle.borderLeftWidth) + parseInt(obj.currentStyle.borderRightWidth)); }
this._yBorder = function(){ return (parseInt(obj.currentStyle.borderTopWidth) + parseInt(obj.currentStyle.borderBottomWidth)); }
【宽度或高度优先】
宽度或高度优先其实就是先执行其中一个渐变,在完成后再执行另一个渐变。
渐变程序中在执行完一次渐变之后会返回一个bool值表示是否渐变完成,利用这个可以这样:
复制代码 代码如下:
this.SetWidth() && this.SetHeight();
由于&&的特性,当this.SetWidth()返回true时才会去执行this.SetHeight(),这也是不错的技巧。
同时为了同步渐变,另外的渐变使用了两倍的步长:
复制代码 代码如下:
this.Step = 2*this.Step;
this.SetOpacity(); this.SetTop(); this.SetLeft();
this.Step = this.Step/2;
这样就能做出宽度或高度优先的效果了。
【定点渐变】
先说说原理,例如以宽度中点为参照点,可以想象如果宽度减少n,那只要left相对增加n*0.5(即n/2),
那么就可以做出以中点为中心变换的效果(当然要先把变换对象设为相对或绝对定位)。
那这个“0.5”怎么来的呢?有点数理知识应该知道就是渐变对象左边到变换点跟渐变对象总宽度的比
程序里用Width.pos保存这个值,在变换前先计算好变换点的位置:
this._x = this._obj.offsetLeft + this._obj.offsetWidth * this.Width.pos;
每次变换都根据这个位置和宽度来重新设置left:
this._obj.style.left = this._x - this._obj.offsetWidth * this.Width.pos + "px";
可能有人会说直接在原有left基础上加上变换宽度*Width.pos不是一样吗?
但问题是经过多次的变换计算(到达目标值前会有多次计算)之后得到的值已经不准确了。
因为在变换计算过程中很多小数会被忽略,随着计算次数增多结果的出入也越大,
所以先定好变换位置参照值(_x),这样不论经过多少次计算变换位置都不会走位了。
同理只要设置不同的Width.pos(包括负数和大于1的数)和Height.pos就可以以任意点为中心渐变了。
还有就是程序的设计也花了不少心思,为了提高整合度,做了一个FadeStruct的结构,其中run、start、end、target属性分别是是否渐变、开始值、结束值、目标值。
用了两次的Object.extend来设置默认值,详细可以看程序。
使用说明:
必要的参数只有一个,就是渐变对象,不过只有渐变对象是没有效果的,必须设置其他属性:
Opacity:透明渐变参数
Height:高度渐变参数
Width:宽度渐变参数
Top:Top渐变参数
Left:Left渐变参数
Step:10,//变化率
Time:10,//变化间隔
Mode:"both",//渐变顺序
Show:false,//是否默认打开状态
onFinish:function(){}//完成时执行
其中Opacity、Height、Width、Top、Left比较特别,是FadeStruct结构
例子里实例化这个对象:
复制代码 代码如下:
var f = new Fade("idFade", { Show: true,
Opacity: { run: true },
Height: { run: true },
Width: { run: true, pos: .5 },
Top: { run: true, end: 70 }
});
设置run为true就表示开启这个变换,start和end是开始和结束值,pos是Height和Width特有的变换位置属性。
更详细的应用可以看实例。
12下一页阅读全文
富贵资源网 Design By www.hznty.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
富贵资源网 Design By www.hznty.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。