web前端教程分享前端javascript练习题二

简介:   web前端教程分享前端javascript练习题,事件委托机制 ----------重要  eg:点击按钮往ul中添加li,使添加的li也有相同的事件var obtn=document.getElementById("btn");var olist=document.

  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;

}}
相关文章
|
11天前
|
开发框架 前端开发 JavaScript
ASP.NET Web Pages - 教程
ASP.NET Web Pages 是一种用于创建动态网页的开发模式,采用HTML、CSS、JavaScript 和服务器脚本。本教程聚焦于Web Pages,介绍如何使用Razor语法结合服务器端代码与前端技术,以及利用WebMatrix工具进行开发。适合初学者入门ASP.NET。
|
21天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
24天前
|
前端开发 JavaScript
探索现代Web应用的微前端架构
【10月更文挑战第40天】在数字时代的浪潮中,Web应用的发展日益复杂多变。微前端架构作为一种新兴的设计理念,正逐步改变着传统的单一前端开发模式。本文将深入探讨微前端的核心概念、实现原理及其在实际项目中的应用,同时通过一个简单的代码示例,揭示如何将一个庞大的前端工程拆分成小而美的模块,进而提升项目的可维护性、可扩展性和开发效率。
|
18天前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
21天前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
24 2
2024年5月node.js安装(winmac系统)保姆级教程
|
15天前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
27 6
|
15天前
|
JavaScript
使用Node.js创建一个简单的Web服务器
使用Node.js创建一个简单的Web服务器
|
18天前
|
机器学习/深度学习 人工智能 JavaScript
JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景
本文探讨了JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景。JavaScript将注重性能优化、跨平台开发、AI融合及WebAssembly整合;TypeScript则强调与框架整合、强类型检查、前端工程化及WebAssembly的深度结合。两者结合发展,特别是在Vue 3.0中完全采用TypeScript编写,预示着未来的Web开发将更加高效、可靠。
33 4
|
20天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
29 5
|
18天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
33 2