网站首页 手机版
 注册 登录
您现在的位置: 畅无忧设计 >> 网页特效 >> 表单按钮 >> 正文
最新文章
· 输入框输入提示代码
· 文本框提示代码
· 让表单ctrl加回车提交
· 简单代码实现JS多级Select联动菜单
· JS验证数字位数
· 带有介绍的Select列表菜单代码
· Js注册等待
· 点击按钮插入文字在文本框
· radio背景颜色选择器
· 表单内容提交等待效果
热门文章
 Js实现点击添加增加一行,点击删除
 DIV中实现input垂直居中
 常用的选择省份城市的联动下拉列表
 JS动态增加删除一组输入框
 jQuery实现Email邮箱地址自动补全代
 Select实现多选
 JS动态批量创建带表单文本框的表格
 JS实现上传本地图片前先预览
 日期选择下拉框
 漂亮的点击弹出的登陆框
相关文章
没有相关文章
JS动画函数:透明度渐变、位置移动、尺寸变化
来源:源码爱好者 更新时间:2011/1/18 10:32:25 阅读次数: 我要投稿
△运行 ☉预览 #复制 +收藏
特效代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script>
function rand(min,max){
return Math.round(min+(Math.random()*(max-min)));
};
var fade = function(element, transparency, speed, callback){//透明度渐变:transparency:透明度 0(全透)-100(不透);speed:速度1-100,默认为1
 if(typeof(element)=='string')element=document.getElementById(element);
 if(!element.effect){
  element.effect = {};
  element.effect.fade=0;
 }
 clearInterval(element.effect.fade);
 var speed=speed||1;
 var start=(function(elem){
  var alpha;
  if(navigator.userAgent.toLowerCase().indexOf('msie') != -1){
    alpha=elem.currentStyle.filter.indexOf("opacity=") >= 0?(parseFloat( elem.currentStyle.filter.match(/opacity=([^)]*)/)[1] )) + '':
    '100';
  }else{
    alpha=100*elem.ownerDocument.defaultView.getComputedStyle(elem,null)['opacity'];
  }
  return alpha;
 })(element);
 if(window.console&&window.console.log)console.log('start: '+start+" end: "+transparency);
 element.effect.fade = setInterval(function(){
  start = start < transparency ? Math.min(start + speed, transparency) : Math.max(start - speed, transparency);
  element.style.opacity =  start / 100;
  element.style.filter = 'alpha(opacity=' + start + ')';
  if(Math.round(start) == transparency){
   element.style.opacity =  transparency / 100;
   element.style.filter = 'alpha(opacity=' + transparency + ')';
   clearInterval(element.effect.fade);
   if(callback)callback.call(element);
  }
 }, 20);
};
var move = function(element, position, speed, callback){//移动到指定位置,position:移动到指定left及top 格式{left:120, top:340}或{left:120}或{top:340};speed:速度 1-100,默认为10
 if(typeof(element)=='string')element=document.getElementById(element);
 if(!element.effect){
  element.effect = {};
  element.effect.move=0;
 }
 clearInterval(element.effect.move);
 var speed=speed||10;
 var start=(function(elem){
  var posi = {left:elem.offsetLeft, top:elem.offsetTop};
  while(elem = elem.offsetParent){
   posi.left += elem.offsetLeft;
   posi.top += elem.offsetTop;
  };
  return posi;
 })(element);
 element.style.position = 'absolute';
 var style = element.style;
 var styleArr=[];
 if(typeof(position.left)=='number')styleArr.push('left');
 if(typeof(position.top)=='number')styleArr.push('top');
 element.effect.move = setInterval(function(){
  for(var i=0;i<styleArr.length;i++){
   start[styleArr[i]] += (position[styleArr[i]] - start[styleArr[i]]) * speed/100;
   style[styleArr[i]] = start[styleArr[i]] + 'px';
  }
  for(var i=0;i<styleArr.length;i++){
   if(Math.round(start[styleArr[i]]) == position[styleArr[i]]){
    if(i!=styleArr.length-1)continue;
   }else{
    break;
   }
   for(var i=0;i<styleArr.length;i++)style[styleArr[i]] = position[styleArr[i]] + 'px';
   clearInterval(element.effect.move);
   if(callback)callback.call(element);
  }
 }, 20);
};
var resize = function(element, size, speed, callback){//长宽渐变:size:要改变到的尺寸 格式 {width:400, height:250}或{width:400}或{height:250};speed:速度 1-100,默认为10
 if(typeof(element)=='string')element=document.getElementById(element);
 if(!element.effect){
  element.effect = {};
  element.effect.resize=0;
 }
 clearInterval(element.effect.resize);
 var speed=speed||10;
 var start = {width:element.offsetWidth, height:element.offsetHeight};
 var styleArr=[];
 if(!(navigator.userAgent.toLowerCase().indexOf('msie') != -1&&document.compatMode == 'BackCompat')){
  //除了ie下border-content式盒模型情况外,需要对size加以修正
  var CStyle=document.defaultView?document.defaultView.getComputedStyle(element,null):element.currentStyle;
  if(typeof(size.width)=='number'){
   styleArr.push('width');
   size.width=size.width-CStyle.paddingLeft.replace(/\D/g,'')-CStyle.paddingRight.replace(/\D/g,'');
  }
  if(typeof(size.height)=='number'){
   styleArr.push('height');
   size.height=size.height-CStyle.paddingTop.replace(/\D/g,'')-CStyle.paddingBottom.replace(/\D/g,'');
  }
 }
 element.style.overflow = 'hidden';
 var style = element.style;
 element.effect.resize = setInterval(function(){
  for(var i=0;i<styleArr.length;i++){
   start[styleArr[i]] += (size[styleArr[i]] - start[styleArr[i]]) * speed/100;
   style[styleArr[i]] = start[styleArr[i]] + 'px';
  }
  for(var i=0;i<styleArr.length;i++){
   if(Math.round(start[styleArr[i]]) == size[styleArr[i]]){
    if(i!=styleArr.length-1)continue;
   }else{
    break;
   }
   for(var i=0;i<styleArr.length;i++)style[styleArr[i]] = size[styleArr[i]] + 'px';
   clearInterval(element.effect.resize);
   if(callback)callback.call(element);
  }
 }, 20);
};
</script></head>
<body>
<div id="testDiv" style="position:absolute; right:100px; top:50px; background-color:#abc; width:100px; height:50px;padding:10px;" onclick="alert(this.style.filter)"><div style="background-color:#369; height:100%;"></div></div>
<br/>
    动画测试  
<input type="button" value="改变大小"
onClick="resize('testDiv', {width:rand(60,600),height:rand(30,300)})" />
<input type="button" value="改变宽度"
onClick="resize('testDiv', {width:rand(60,600)})" />
<input type="button" value="改变高度"
onClick="resize('testDiv', {height:rand(30,300)})" />
  
<input type="button" value="移动位置"
onClick="move('testDiv', {left:rand(40,600),top:rand(40,400)})" />
<input type="button" value="水平移动"
onClick="move('testDiv', {left:rand(40,600)})" />
<input type="button" value="垂直移动"
onClick="move('testDiv', {top:rand(40,400)})" />
  
<input type="button" value="透明度变化"
onClick="fade('testDiv', rand(5,100))" />
  
<input type="button" value="还原"
onClick="var ele=document.getElementById('testDiv');clearInterval(ele.effect.move);clearInterval(ele.effect.fade);clearInterval(ele.effect.resize);ele.style.cssText='position:absolute; right:100px; top:50px; background-color:#abc; width:100px; height:50px;padding:10px;'" />
</body>
</html>
△运行 ☉预览 #复制 +收藏
特效说明:

  基于JavaScript的三个动画函数,透明度渐变、位置移动、尺寸变化,不喜欢臃肿的JS,所以自己写了这个,适用于做前端网页设计,只需要简单的动画效果但又不想引入整个动画类的情况下,可以使用本函数。

  2、在写js类时,需要用到简单的动画,为了降低藕合性,同样可用本函数。

  • 上一篇文章:
  • 下一篇文章:
  • 关于我们 - 联系我们 - 广告服务 - 在线投稿 - 友情链接 - 网站地图 - 版权声明
    CopyRight 2008-2010, CWYDESIGN.COM - 畅无忧设计, Inc. All Rights Reserved
    滇ICP备09005765号