《JavaScript DOM艺术编程》中的三个通用函数

本文介绍了三种实用的JavaScript函数:moveElement用于实现元素的平滑移动动画;focusLabels为label元素添加点击聚焦功能;resetFields则实现了表单字段默认值的自动管理和恢复。

1. moveElement 函数:移动网页上的一个元素(常用于实现简单动画)。

  • 参数1:要移动的元素的ID
  • 参数2:目标位置的X坐标值
  • 参数3:目标位置的Y坐标值
  • 参数4:移动频率,单位毫秒,就是多少毫秒移动一次

 

moveElement 函数
function moveElement(elementID,final_x,final_y,interval) {
  
if (!document.getElementById) return false;
  
if (!document.getElementById(elementID)) return false;
  
var elem = document.getElementById(elementID);
  
if (elem.movement) {
    clearTimeout(elem.movement);
  }
  
if (!elem.style.left) {
    elem.style.left 
= "0px";
  }
  
if (!elem.style.top) {
    elem.style.top 
= "0px";
  }
  
var xpos = parseInt(elem.style.left);
  
var ypos = parseInt(elem.style.top);
  
if (xpos == final_x && ypos == final_y) {
    
return true;
  }
  
if (xpos < final_x) {
    
var dist = Math.ceil((final_x - xpos)/10);
    xpos = xpos + dist;
  }
  
if (xpos > final_x) {
    
var dist = Math.ceil((xpos - final_x)/10);
    xpos = xpos - dist;
  }
  
if (ypos < final_y) {
    
var dist = Math.ceil((final_y - ypos)/10);
    ypos = ypos + dist;
  }
  
if (ypos > final_y) {
    
var dist = Math.ceil((ypos - final_y)/10);
    ypos = ypos - dist;
  }
  elem.style.left 
= xpos + "px";
  elem.style.top 
= ypos + "px";
  
var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
  elem.movement 
= setTimeout(repeat,interval);
}


2. focusLabels 函数:对网页中存在for属性的label元素加上事件处理函数,使用户单击该label元素就可以定位此label元素指定的目标form元素

focusLabels 函数
function focusLabels() {
  
if (!document.getElementsByTagName) return false;
  
var labels = document.getElementsByTagName("label");
  
for (var i=0; i<labels.length; i++) {
    
if (!labels[i].getAttribute("for")) continue;
    labels[i].onclick 
= function() {
      
var id = this.getAttribute("for");
      
if (!document.getElementById(id)) return false;
      
var element = document.getElementById(id);
      element.focus();
    }
  }
}

3. resetFields 函数:当表单字段获得输入焦点时自动删除它的默认值,当用户未输入任何东西的情况下离开表单字段时恢复它的默认值,此函数的唯一参数是要应用此特性的表单对象
resetFields 函数
function resetFields(whichform) {
  
for (var i=0; i<whichform.elements.length; i++) {
    
var element = whichform.elements[i];
    
if (element.type == "submit"continue;
    
if (!element.defaultValue) continue;
    element.onfocus 
= function() {
    
if (this.value == this.defaultValue) {
      
this.value = "";
     }
    }
    element.onblur 
= function() {
      
if (this.value == "") {
        
this.value = this.defaultValue;
      }
    }
  }
}


转载于:https://www.cnblogs.com/Tuwi/archive/2008/04/19/1161364.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值