web前端教程分享前端javascript练习题二
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<child.length;i++){
child[i].innerHTML=strarr[i];
}
//拖拽
for(var i=0;i<child.length;i++){
child[i].onmousedown=function(e){
var evt=e||event;
var lf=evt.offsetX;
var tp=evt.offsetY;
var current=this; //将this保存current中 ,因为上下指向的this不同
//因为拖动的时候原位置,还需要有东西,所以才克隆
var clone=current.cloneNode(); //克隆一个当前的元素,并添加到盒子里
clone.style.border="1px dashed #000";// obox.appendChild(clone); //因为添加之后克隆的索引在最后,// 后面需要进行距离比较,所以需要将克隆节点和当前节点进行替换
obox.replaceChild(clone,current); //用克隆的节点替换当前节点
obox.appendChild(current); //把当前节点加到盒子里
current.style.zIndex=1;
document.onmousemove=function(e){
var evt=e||event;
var x= e.clientX-lf-obox.offsetLeft;
var y= e.clientY-tp-obox.offsetTop;
//当前对象的坐标:随着鼠标移动
current.style.left=x+"px";
current.style.top=y+"px";
return false; //取消默认行为
}
document.onmouseup=function(){
//将当前的这个和剩下所有的进行比较,找出距离最近的
//将当前放到距离最近的位置,最近的那个放到克隆的位置
var arr=[];
var newarr=[];
//以为此时当前节点的索引在最后,不需要和自身比较,所以去掉最后一个索引
for(var i=0;i<child.length-1;i++){
var wid=current.offsetLeft-child[i].offsetLeft;
var hei=current.offsetTop-child[i].offsetTop;
var juli=Math.sqrt(Math.pow(wid,2)+Math.pow(hei,2));
arr.push(juli);
newarr.push(juli);
}
arr.sort(function(a,b){
return a-b;
})
var min=arr[0];
var minindex=newarr.indexOf(min);
//交换位置:当前的坐标为最小距离对应的位置,最小值的放在克隆所在的位置
current.style.left=child[minindex].style.left;
current.style.top=child[minindex].style.top;
child[minindex].style.left=clone.style.left;
child[minindex].style.top=clone.style.top;
obox.removeChild(clone); //交换位置之后将克隆的节点删除
document.onmousemove=null;
document.onmouseup=null;
}
}
}
轨迹
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;
}}

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
hbase全文服务(solr) 系列资料
概述 本文整理了HBase+solr 全文服务的相关阅读材料,使用到云HBase全文服务的用户 以及 那些准备给自建HBase增加es/solr/lucene索引服务架构的用户,可以阅读以下资料了解相关原理与应用。 hbase for solr介绍 中国hbase技术社区meetup上海站201809 内容概述:hbase发展为大多数企业的数据kv存储,但偶尔也会需要在这些数据中进行一些复杂的查询和统计,虽然查询频率没有kv那么高,但是依然是企业必须具备的一种能力。例如一个电信话单系统、物流轨迹系统等,除了大量的kv在线检索之外,可能还需要有管理专员定期进行一下复杂的条件查询或者min/max/avg分析统计等。本PPT提出的HBase for Solr就是其中一种解决方案。PPT下载地址 solr增强hbase检索能力基础介绍几场景 内
-
下一篇
2020年三大网络安全预测:企业将通过并购活动收集数据并将其武器化
2020年及以后,安全和风险专业人士将发现,网络安全决策会具备前所未有的社会影响力。我们生活、学习和社交都越来越依赖于技术,而这种依赖性也使技术成为攻击目标。 由于我们在做出关键决策时对数据的依赖日益增加,这导致恶意行为者更有动机使用勒索软件来限制对大型数据池的访问。而人口数据的武器化将使专断的政府和空壳组织有更大的能力操纵地缘政治,扩大其在境外的影响力。过去几年对人工智能和机器学习(ML)所做的改进将导致改会提高网络安全,但同时也将帮助攻击者。 这些趋势背景下,为2020年的三个网络安全预测奠定了基础: 1. 企业将通过并购活动收集数据并将其武器化 剑桥分析丑闻的揭露虽然引起了人们对数据收集的普遍担忧,但数据价值的不断增长仍然让企业和政府难以忽视这一资源。旨在限制企业如何共享其大量数据的法律将在全球范围内激增,但这些措施对阻止数据整合背后不断增长的并购市场无济于事。 企业收集用户偏好数据,用户位置或医疗信息等在最开始的时候可能是无害的,但是如果当前领先的应用背后的公司被政府所有的实体收购,这些数据现在就会被对手利用。 当北京的工程师通过收购Grindr合法地获得了敏感的健康信息时,他...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Windows10,CentOS7,CentOS8安装Nodejs环境