好程序员web前端教程分享前端javascript练习题,事件委托机制 ----------重要
  eg:点击按钮往ul中添加li,使添加的li也有相同的事件
var obtn=document.getElementById("btn");
var olist=document.getElementById("list"); //获取ul
var oli=olist.children; //获取ul的子节点li
olist.onclick=function(e){
var evt=e||event;
var tar=evt.target||evt.srcElement; //获取事件源
if(tar.nodeName.toLowerCase()=="li"){ 判断事件源是不是是该执行目标
console.log(tar.innerHTML); //此时不能用this,因为this指向的是ul
}
}
obtn.onclick=function(){
for(var i=0;i<4;i++){
var lli=document.createElement("li");
lli.innerHTML="aaaa";
olist.appendChild(lli);
}
}
拖拽效果
var odiv=document.getElementsByTagName("div")[0];
odiv.onmousedown=function(e){ //按下鼠标的事件
var evt=e||event;
var lf=evt.offsetX;
var tp=evt.offsetY;
document.onmousemove=function(e){ //鼠标移动事件
var evt=e||event;
var x=evt.clientX-lf; //让鼠标一直在按下的那个位置
var y=evt.clientY-tp;
//设置元素只能在可视区域内移动
if(x<=0){
x=0;
}
if(x>=document.documentElement.clientWidth-odiv.offsetWidth){
x=document.documentElement.clientWidth-odiv.offsetWidth
}
if(y<=0){
y=0;
}
if(y>=document.documentElement.clientHeight-odiv.offsetHeight){
y=document.documentElement.clientHeight-odiv.offsetHeight;
}
odiv.style.left=x+"px"; //让元素跟着鼠标移动
odiv.style.top=y+"px";
}
document.onmouseup=function(){ //鼠标抬起事件
document.onmousemove=null;
}}
九宫格
js代码:
var obox=document.getElementById("box");
//创建结构
for(var i=0;i<3;i++){ //控制外层的行数
for(var j=0;j<3;j++){ //控制内层
var odiv=document.createElement("div");
obox.appendChild(odiv);
/ var r=Math.floor(Math.random()256);
var g=Math.floor(Math.random()256);
var b=Math.floor(Math.random()
256);/
odiv.style.backgroundColor="rgb("+Math.floor(Math.random()
256)+','+Math.floor(Math.random()256)+','+Math.floor(Math.random()256)+")"; //字符串拼接
odiv.style.left=j(odiv.offsetWidth+10)+"px";
odiv.style.top=i
(odiv.offsetHeight+10)+"px";

    }
}
var strarr=["a","b","c","d","e","f","g","h","i","m"];
var child=obox.children;
//给每个小块加上文字
for(var i=0;i

轨迹
js代码:
var odiv = document.getElementsByTagName("div")[0];var arr=[]; //用来保存鼠标移动时的坐标位置
document.onmousedown = function (e) {
var evt1 = e || event;
var x=evt1.clientX;
var y=evt1.clientY;
arr.push({pagex:x,pagey:y});
document.onmousemove=function(e){
var evt = e || event;
var x = evt.clientX;
var y = evt.clientY;
arr.push({pagex:x,pagey:y}); //采用对象数组存储,因为坐标成对好进行操作
return false; //取消浏览器的默认行为
//console.log(arr);
}
document.onmouseup=function(){
var timer=setInterval(function(){
odiv.style.left=arr[0].pagex+"px";
odiv.style.top=arr[0].pagey+"px";
arr.splice(0,1); //让元素坐标始终从0开始,splice会改变原数组长度
if(arr.length==0){ //当数组长度为0,说明保存的坐标执行完了
clearInterval(timer);
}
},20);
document.onmousemove=null;
}}