如何写一个通用的JavaScript效果库!(2/2)
发布时间:2024-04-10 11:02:22
标签:如何写一个通用的JavaScript效果库,(2/2)
在上个随笔中贴出了效果库的整体框架,和一个简单的opacity插件. 今天这个随笔主要是扩展其他常用
效果插件,毕竟框架只能是个空壳,内容还是要自己充实。
如果看过了我上篇的实现细节,这里就不多说废话了,来段代码先:
/**//****************************************************/
// 移动, 这里是move to 就是移动到 x,y 当然,大家也可以再扩展一个move by 移动x个象素
Effect.Init.move=function(effect){ //初始化
if (effect.options.x!==undefined || effect.options.y!==undefined){
var pos=Position.cumulativeOffset(effect.element);
effect.setting.left =pos[0];
effect.setting.top =pos[1];
effect.setting.position =effect.element.style.position;
effect.element.style.position ="absolute"
effect.options.x=(effect.options.x===undefined)?effect.setting.left:effect.options.x;
effect.options.y=(effect.options.y===undefined)?effect.setting.top :effect.options.y;
}
}
Effect.Fn.move=function(effect,pos){ //效果
if (effect.options.x===undefined && effect.options.y===undefined) return
effect.element.style.left=effect.setting.left + (effect.options.x-effect.setting.left) * pos +"px";
effect.element.style.top =effect.setting.top + (effect.options.y-effect.setting.top ) * pos +"px";
}
/**//****************************************************/
/**//****************************************************/
// zoom by Go_Rush(阿舜) from http://ashun.cnblogs.com/
Effect.Init.zoom=function(effect){
effect.setting.zoom =effect.element.style.zoom || 1;
// firefox 不支持 css的 zoom 用 改变 width,height的方式代替
if (effect.options.zoom!==undefined && navigator.userAgent.toLowerCase().indexOf('firefox') != -1){
effect.options.w=effect.element.offsetWidth * effect.options.zoom;
effect.options.h=effect.element.offsetHeight * effect.options.zoom;
}
}
Effect.Fn.zoom=function(effect,pos){
if (effect.options.zoom===undefined) return;
effect.element.style.zoom=effect.setting.zoom+(effect.options.zoom-effect.setting.zoom)*pos
}
/**//****************************************************/
/**//****************************************************/
// size 同上,是 size to, 改变到指定大小 by Go_Rush(阿舜) from http://ashun.cnblogs.com/
Effect.Init.size=function(effect){
if (effect.options.w!==undefined || effect.options.h!==undefined){
effect.setting.overflow =effect.element.style.overflow || 'visible';
effect.setting.width =effect.element.offsetWidth;
effect.setting.height =effect.element.offsetHeight;
effect.element.style.overflow ="hidden"
effect.options.w=(effect.options.w===undefined)?effect.setting.width :effect.options.w;
effect.options.h=(effect.options.h===undefined)?effect.setting.height:effect.options.h;
}
}
Effect.Fn.size=function(effect,pos){
if (effect.options.w===undefined && effect.options.h===undefined) return;
effect.element.style.width =effect.setting.width + (effect.options.w-effect.setting.width ) * pos +"px";
effect.element.style.height=effect.setting.height+ (effect.options.h-effect.setting.height) * pos +"px";
}
/**//****************************************************/
/**//****************************************************/
// 背景色 by Go_Rush(阿舜) from http://ashun.cnblogs.com/
Effect.Init.bgcolor=function(effect){
if (effect.options.bgcolor!==undefined && /^\#?[a-f0-9]{6}$/i.test(effect.options.bgcolor)){
var color =effect.element.style.backgroundColor || "#ffffff";
//FireFox 下,即使css样式设置背景为 #ffffff格式,但程序取到的是 rgb(255,255,255)格式, 这里把他转化为 #ffffff格式
if (/rgb/i.test(color)){ // "rgb(255, 0, 255)"
//var arr=color.replace(/[rgb\(\s\)]/gi,"").split(",")
var arr=eval(color.replace("rgb","new Array"))
color="#"+Number(arr[0]).toColorPart()+Number(arr[1]).toColorPart()+Number(arr[2]).toColorPart()
}
effect.setting.bgcolor=color
}
}
Effect.Fn.bgcolor=function(effect,pos){
if (effect.options.bgcolor===undefined) return;
var c1=effect.setting.bgcolor,c2=effect.options.bgcolor
var arr1=[parseInt(c1.slice(1,3),16),parseInt(c1.slice(3,5),16),parseInt(c1.slice(5),16)]
var arr2=[parseInt(c2.slice(1,3),16),parseInt(c2.slice(3,5),16),parseInt(c2.slice(5),16)]
var r=Math.round(arr1[0]+(arr2[0]-arr1[0])*pos)
var g=Math.round(arr1[1]+(arr2[1]-arr1[1])*pos)
var b=Math.round(arr1[2]+(arr2[2]-arr1[2])*pos)
effect.element.style.backgroundColor="#"+r.toColorPart()+g.toColorPart()+b.toColorPart()
}
/**//****************************************************/
/**//****************************************************/
// 透明度,这个上个贴过了 by Go_Rush(阿舜) from http://ashun.cnblogs.com/
Effect.Init.opacity=function(effect){
if (effect.options.opacity===undefined) return;
effect.setting.opacity=Opacity(effect.element);
}
Effect.Fn.opacity=function(effect,pos){
if (effect.options.opacity===undefined) return;
Opacity(effect.element,effect.setting.opacity+(effect.options.opacity-effect.setting.opacity)*pos);
}
/**//****************************************************/
这里 effect.setting 是非常有用而且非常重要的冬冬,所有的通过options传进来自定义函数都可以
通过effect.setting来获取element最初的设置。 在很多场合,我们需要在 options 中传一个 onComplete
函数进来, 用来在效果执行完毕后,打扫战场,恢复一些设置。
这些效果是可以重叠的,大家可以看看下面我写的例子。
写了十来个例子,应该很详细了。
完整的,可调试代码和例子如下:
<script language="javascript"> /**//* 这个函数的代码来自 Prototype.js http://prototype.conio.net/ 如果页面引用了prototype.js ,则可以删除下面这个函数, 当然,即使不删除也没关系,因为作了简单的兼容性判断 */ (function(){ if (!("Prototype" in window)){ Prototype={emptyFunction:function(){}}; Class ={ create: function(){return function(){this.initialize.apply(this, arguments)}} }; $ = function(element){ return typeof(element)=="string"?document.getElementById(element):element }; $A= function(arrLike){ for(var i=0,ret=[];i5) return false; new Effect("div1",{x:280,delay:0.5,duration:0.1,onComplete:function(){ new Effect("div1",{x:320,duration:0.1,onComplete:function(){ new Effect("div1",{x:280,duration:0.1,onComplete:function(){ new Effect("div1",{x:320,duration:0.1,onComplete:function(){ new Effect("div1",{x:280,duration:0.1,onComplete:function(){ new Effect("div1",{x:300,duration:0.1,onComplete:function(){ fix6() }}) }}) }}) }}) }}) }}) } </script> <fieldset> <legend>单一效果</legend> <button onclick="javascript:foo1()">颜 色 foo1</button>&nbsp; <button onclick="javascript:foo2()">大 小 foo2</button>&nbsp; <button onclick="javascript:foo3()">位 置 foo3</button>&nbsp; <button onclick="javascript:foo4()">透 明 度 foo4</button>&nbsp; <button onclick="javascript:foo5()">Zoom foo5</button>&nbsp; <button onclick="javascript:foo6()">所有 foo6</button>&nbsp; </fieldset> <fieldset> <legend>复合效果</legend> <button onclick="javascript:fix1()"> 淡出fix1</button>&nbsp; <button onclick="javascript:fix2()"> 折起fix2</button>&nbsp; <button onclick="javascript:fix3()"> 慢慢变小消失 fix3</button>&nbsp; <button onclick="javascript:fix4()"> 慢慢变小消失2 fix4</button>&nbsp; <button onclick="javascript:fix5()"> 变色 fix5</button>&nbsp; <button onclick="javascript:fix6()"> 震动5次 fix6</button>&nbsp; </fieldset> <button onclick="javascript:location.reload()"> 每次效果后按这里恢复</button>&nbsp; 注意 FireFox 不支持 Zoom <div id="div1" style="border:1px solid red;width:300px;height:150px;overflow:hidden;position:absolute;left:300px;top:200px;z-index:2;background-color:#ffffff"> Go_Rush(阿舜) <img src="http://www.google.com/intl/zh-CN_ALL/images/logo.gif"> </div>
0
投稿
猜你喜欢
- 如下所示:try:a=1except Exception as e: print (e)import tracebackimport sys
- 测试的php文件 <?php $link=mysql_connect('localhost','root
- python的验证码库(captcha)将验证码做成这样:是不是和各大网页的图片源地址是一样,话不多说,让我们看代码:我是用django和p
- 版本:python3.7功能,开发一个用户访问的页面,支持图片上传,并将其保存在服务器。项目结构:app.py文件内容如下:from fla
- 无参修饰 ,无参数时不需要调用def log1(func): func()@log1def test(): prin
- Dubbo提供动态调整超时时间的服务治理能力,可以在无需重启应用的情况下,动态调整服务超时时间。Dubbo可以通过XML配置,注解配置,动态
- groupby()函数在python的DataFrame中对数据进行分组统计主要使用groupby()函数。1. groupby基本用法1.
- ini文件是windows中经常使用的配置文件,主要的格式为:[Section1]option1 : value1option2 : val
- <SCRIPT language="javascript"> function&nbs
- 目前用于Python的格式化程序(如autopep8和pep8ify)都用于删除代码中的lint错误。这有很明显的局限性。YAPF采用了不同
- mmdetection简介 目标检测工具箱mmdetection是香
- 一、前言在多进程中,每个进程之间是什么关系呢?其实每个进程都有自己的地址空间、内存、数据栈以及其他记录其运行状态的辅助数据。下面通过一个例子
- 背景我们先来看看MySQL 8.0的事务提交的大致流程以上流程,是MySQL8.0对WAL原则的一种实现,这个流程意味着,任何一个事务的提交
- virtualenv介绍virtualenv为应用提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题。virtualenv把
- 优点:兼容性很好,而且俺觉得不应该有什么拦截工具可以拦截下来优点:代码非常短缺点:必须在页面点击后才会弹出demo:运行代码框<hea
- 用Pyinstaller封装一个py文件时,过程没有问题,但打开后会出现闪退的现象。因此上网找,找到了上面网址所示的解决方法。也就是用cmd
- 绘制一个线框图是你在制作一个网站前必须要经历的过程。线框图能够帮助你合理的组织并简化你内容和元素,是网站内容布局的基本视觉表现方式,是网站开
- 一、MongoDB对MySQL常用的SQL语句对应的实现 —————————————— MySQL: SELECT * FROM user
- 在任何一个数据库中,查询优化都是不可避免的一个话题。对于数据库工程师来说,优化工作是最有挑战性的工作。MySQL开源数据库也不例外本站收录这
- 如何自动更新导航栏?下面看看如何具体使用Content Linking组件: <&nbs