广告
返回顶部
首页 > 资讯 > 前端开发 > html >Javascript API实例分析
  • 286
分享到

Javascript API实例分析

2024-04-02 19:04:59 286人浏览 安东尼
摘要

这篇文章主要介绍“javascript  api实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Javascript  API实例分析”文

这篇文章主要介绍“javascript  api实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Javascript  API实例分析”文章能帮助大家解决问题。

拖拽(Drag/Drop)是个非常普遍的功能,可以抓住一个对象,并且拖动到你想放置的区域;在HTML5中,拖拽(draganddrop)成为了标准操作,任何元素都支持。正因为这个功能太普遍了,所有的主流浏览器都支持这个操作,感兴趣的朋友可以了解下,或许对你有所帮助

拖拽(Drag/Drop)是个非常普遍的功能。你可以抓住一个对象,并且拖动到你想放置的区域。很多javascript都类似实现了相关的功能,例如,JqueryUI的draganddrop组件。在html5中,拖拽(draganddrop)成为了标准操作,任何元素都支持。正因为这个功能太普遍了,所有的主流浏览器都支持这个操作。

启用拖拽-draggable属性

非常简单,只需要将一个元素的拖动属性修改为draggable,这个元素就支持拖动了,如下所示:

代码如下:

<imgdraggable="true"/>

拖动中数据的传递

拖动的过程中,我们往往需要传递相应的逻辑数据来完成转换的过程,这里主要是使用dataTransfer对象进行数据传递,下面先看看它的成员:

方法成员:

代码如下:

setData(fORMat,data):把被拖动的数据赋值给dataTransfer对象。

format:一个String型参数,指定被拖动数据的类型。该参数取值可以是“Text”(文本类型)和“URL”(URL类型)。该参数是大小写无关的,所以传入"text"与"Text"是一样的。

data:一个变体类型参数,指定被拖动的数据。该数据可以是文本,图片路径,URL等等。

该函数有Boolean类型的返回值,true表示数据成功加到dataTransfer中,false代表不成功。如果需要,可以通过这个参数来决定是否应该继续执行某些逻辑。

代码如下:

getData(format):获取dataTransfer中存放的拖动数据。

format意义与setData中的一样,取值可以是"Text"(文本类型)和"URL"(URL类型)。

代码如下:

clearData(format):移除指定类型的数据。

这里的format除了上面可以指定的"Text"(文本类型)和"URL"(URL类型)外,还可以取下列值:file-文件,html-html元素,image-图片。

这个方法可以用于去选择性的处理拖动的数据类型。

属性成员:

代码如下:

effectAllowed:设置或获取数据源元素中的数据可以执行的操作。

属性类型为字符串,取值范围如下:

"copy"-复制数据.

"link"-链接数据.

"move"-移动数据

"copyLink"-复制或链接数据,由目标对象来确定。

"copyMove"-复制或移动数据,由目标对象来确定。

"linkMove"-链接或移动数据,由目标对象来确定。

"all"-所有的操作都是支持的。

"none"-禁止拖动。

"uninitialized"-默认值,采用默认的行为。

注意设置effectAllowed为none以后,拖动是禁止的,但是鼠标形状还是显示没有可拖动的对象的形状,如果想不显示这个鼠标形状,则需要将window的event事件的属性returnValue设置为false。

代码如下:

dropEffect:设置或获取拖动的目标上允许的操作以及相关的鼠标形状。

属性类型为字符串,取值范围如下:

"copy"-鼠标显示为复制时的形状;

"link"-鼠标显示为连接的形状;

"move"-鼠标显示为移动的形状。

"none"(默认值)-鼠标显示为没有拖动的形状。

effectAllowed指定了数据源支持的操作,所以通常在ondragstart事件中指定。dropEffect指定了拖动放置的目标支持的操作,所以与effectAllowed配合,通常在拖动的目标上的ondragenter,ondraGover和ondrop等事件中使用。

代码如下:

files:返回拖动的文件的列表FileList。

types:ondragstart中发送的数据(被拖动的数据)类型的列表。

dataTransfer对象的存在,使得在拖动的数据源和目标元素之间传递逻辑数据变成了可能。通常我们使用setData方法在数据源元素的ondragstart事件中提供数据,然后再目标元素中,使用getData方法获取数据。

拖动中触发的事件

下面是一次拖拽会发生的事件,基本上事件的触发顺序也就是下面的顺序:

代码如下:

dragstart:要被拖拽的元素开始拖拽时触发,这个事件对象是被拖拽元素。

drag:拖拽元素时触发,这个事件对象是被拖拽元素。

dragenter:拖拽元素进入目标元素时触发,这个事件对象是目标元素。

dragover:拖拽某元素在目标元素上移动时触发,这个事件对象是目标元素。

dragleave:拖拽某元素离开目标元素时触发,这个事件对象是目标元素。

drop:将被拖拽元素放在目标元素内时触发,这个事件对象是目标元素。

dragend:在drop之后触发,就是拖拽完毕时触发,这个事件对象是被拖拽元素。

基本上事件的参数event都会传入相关的元素,可以很方便的进行一些修改。这里,我们并不需要处理每个事件,通常只需要挂接主要的几个事件即可。

拖动开始-ondragstart事件

从这个事件传入的参数含有的信息非常丰富,从中可以很方便的获取到被拖动的元素(event.Target);从中可以设置被拖动数据(event.dataTransfer.setData);所以你可以很方便实现拖动的背后逻辑(当然你绑定的时候也可以传递其他的参数)。

拖动过程中-ondrag,ondragover,ondragenter和ondragleave事件

ondrag事件的对象是被拖拽元素,通常这个事件处理的比较少。ondragenter事件是当拖动进入当前元素时发生,ondragleave事件是在当拖动离开当前元素时发生,ondragover事件是在拖动在当前元素中移动时发生。

这里只需要注意一点,因为默认情况下,浏览器是禁止元素drop的,所以为了让元素可以drop,需要在这个函数中返回false或者调用event.preventDefault()方法。如下面的例子所示。

拖动结束-ondrop,ondragend事件

当可拖动的数据被drop的时候,drop事件触发。drop结束后,dragend事件被触发,这个事件使用的也相对少一点。

看一个简单的例子:

代码如下:

<!DOCTYPEHTML>

<html>

<head>

<scripttype="text/javascript">

functionallowDrop(ev){

ev.preventDefault();

}

functiondrag(ev){

ev.dataTransfer.setData("Text",ev.target.id);

}

functiondrop(ev){

vardata=ev.dataTransfer.getData("Text");

ev.target.appendChild(document.getElementById(data));

ev.preventDefault();

}

</script>

</head>

<body>

<divid="div1"ondrop="drop(event)"ondragover="allowDrop(event)"></div>

<imgid="drag1"src="img_logo.gif"draggable="true"ondragstart="drag(event)"width="336"height="69"/>

</body>

</html>

文件拖拽

上面的例子已经使用了dataTransfer的各种方法和属性,下面再看网上的另外一个有趣的应用:拖拽一个图片到网页上,然后在网页上显示。这个应用用到了dataTransfer的files属性。

代码如下:

<!DOCTYPEHTML>

<html>

<head>

<metacharset="utf-8">

<title>HTML5拖放文件</title>

<style>

#section{font-family:"Georgia","微软雅黑","华文中宋";}

.container{display:inline-block;min-height:200px;min-width:360px;color:#f30;padding:30px;border:3pxsolid#DDD;-moz-border-radius:10px;-WEBkit-border-radius:10px;border-radius:10px;}

.preview{max-width:360px;}

#files-list{position:absolute;top:0;left:500px;}

#list{width:460px;}

#list.preview{max-width:250px;}

#listp{color:#888;font-size:12px;}

#list.green{color:#09c;}

</style>

</head>

<body>

<divid="section">

<p>把你的图片拖到下面的容器内:</p>

<divid="container"class="container">

</div>

<divid="files-list">

<p>已经拖进过来的文件:</p>

<ulid="list"></ul>

</div>

</div>

<script>

if(window.FileReader){

varlist=document.getElementById('list'),

cnt=document.getElementById('container');

//判断是否图片

functionisImage(type){

switch(type){

case'image/jpeg':

case'image/png':

case'image/gif':

case'image/bmp':

case'image/jpg':

returntrue;

default:

returnfalse;

}

}

//处理拖放文件列表

functionhandleFileSelect(evt){

evt.stopPropagation();

evt.preventDefault();

varfiles=evt.dataTransfer.files;

for(vari=0,f;f=files[i];i++){

vart=f.type?f.type:'n/a',

reader=newFileReader(),

looks=function(f,img){

list.innerHTML+='<li><strong>'+f.name+'</strong>('+t+

')-'+f.size+'bytes<p>'+img+'</p></li>';

cnt.innerHTML=img;

},

isImg=isImage(t),

img;

//处理得到的图片

if(isImg){

reader.onload=(function(theFile){

returnfunction(e){

img='<imGClass="preview"src="'+e.target.result+'"title="'+theFile.name+'"/>';

looks(theFile,img);

};

})(f)

reader.readAsDataURL(f);

}else{

img='"o((>&omega;<))o",你传进来的不是图片!!';

looks(f,img);

}

}

}

//处理插入拖出效果

functionhandleDragEnter(evt){this.setAttribute('style','border-style:dashed;');}

functionhandleDragLeave(evt){this.setAttribute('style','');}

//处理文件拖入事件,防止浏览器默认事件带来的重定向

functionhandleDragOver(evt){

evt.stopPropagation();

evt.preventDefault();

}

cnt.addEventListener('dragenter',handleDragEnter,false);

cnt.addEventListener('dragover',handleDragOver,false);

cnt.addEventListener('drop',handleFileSelect,false);

cnt.addEventListener('dragleave',handleDragLeave,false);

}else{

document.getElementById('section').innerHTML='你的浏览器不支持啊,同学';

}

</script>

</body>

</html>

这个例子中使用了html5中的文件读取API:FileReader对象;该对象提供了下列异步方法用于读取文件:

1.FileReader.readAsBinaryString(fileBlob)

以二进制的方式读取文件,result属性会包含一个文件的二进制的格式

2.FileReader.readAsText(fileBlob,opt_encoding)

以文本的方式读取文件,result属性将会包含一个文件的文本格式,默认解码参数是“utf-8”。

3.FileReader.readAsDataURL(file)

以URL形式读取文件result将会包含一个文件的DataURL格式(图片通常用这种方式)。

当使用上面的方法读取文件后,会触发下列事件:

代码如下:

onloadstart,onprogress,onabort,onerror,onload,onloadend

这些事件都很简单,需要的时候挂接就可以了。看下面的代码示例:

代码如下:

functionstartRead(){

//obtaininputelementthroughDOM

varfile=document.getElementById('file').files[0];

if(file){

getAsText(file);

}

}

functiongetAsText(readFile){

varreader=newFileReader();

//ReadfileintomemoryasUTF-16

reader.readAsText(readFile,"UTF-16");

//Handleprogress,success,anderrors

reader.onprogress=updateProgress;

reader.onload=loaded;

reader.onerror=errorHandler;

}

functionupdateProgress(evt){

if(evt.lengthComputable){

//evt.loadedandevt.totalareProgressEventproperties

varloaded=(evt.loaded/evt.total);

if(loaded<1){

//Increasetheprogbarlength

//style.width=(loaded*200)+"px";

}

}

}

functionloaded(evt){

//Obtainthereadfiledata

varfileString=evt.target.result;

//HandleUTF-16filedump

if(utils.regexp.isChinese(fileString)){

//ChineseCharacters+Namevalidation

}

else{

//runothercharsettest

}

//xhr.send(fileString)

}

functionerrorHandler(evt){

if(evt.target.error.name=="NotReadableErr"){

//Thefilecouldnotberead

}

}

这里也简单说一下:普通的文件下载使用的就是window.open方法,例如:

代码如下:

window.open('Http://aaa.bbbb.com/ccc.rar','_blank')

关于“Javascript  API实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网html频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Javascript API实例分析

本文链接: https://www.lsjlt.com/news/90812.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Javascript API实例分析
    这篇文章主要介绍“Javascript  API实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Javascript  API实例分析”文...
    99+
    2022-10-19
  • JavaScript Hoisting实例分析
    这篇文章主要介绍“JavaScript Hoisting实例分析”,在日常操作中,相信很多人在JavaScript Hoisting实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2022-10-19
  • Hibernate API举例分析
    本篇内容介绍了“Hibernate API举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java代码<STRONG>Hi...
    99+
    2023-06-17
  • JavaScript原型实例分析
    这篇文章主要讲解了“JavaScript原型实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript原型实例分析”吧!先看三个对象一、构造函数(对象):JS中声明函数的三种...
    99+
    2023-06-29
  • JavaScript的DOM实例分析
    这篇文章主要介绍了JavaScript的DOM实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript的DOM实例分析文章都会有所收获,下面我们一起来看看吧。...
    99+
    2022-10-19
  • JavaScript变量实例分析
    本篇内容主要讲解“JavaScript变量实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript变量实例分析”吧!   &nbs...
    99+
    2022-10-19
  • JavaScript的BOM实例分析
    这篇文章主要讲解了“JavaScript的BOM实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript的BOM实例分析”吧!   lo...
    99+
    2022-10-19
  • JavaScript闭包实例分析
    这篇文章主要讲解了“JavaScript闭包实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript闭包实例分析”吧!   JavaSc...
    99+
    2022-10-19
  • JavaScript语句实例分析
    这篇“JavaScript语句实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Jav...
    99+
    2022-10-19
  • JavaScript语法实例分析
    本篇内容主要讲解“JavaScript语法实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript语法实例分析”吧!   &nbs...
    99+
    2022-10-19
  • JavaScript对象实例分析
    本篇内容介绍了“JavaScript对象实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! Java...
    99+
    2022-10-19
  • JavaScript显示实例分析
    这篇文章主要讲解了“JavaScript显示实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript显示实例分析”吧! JavaScri...
    99+
    2022-10-19
  • JavaScript引入实例分析
    这篇“JavaScript引入实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Jav...
    99+
    2022-10-19
  • JavaScript实例 ODO List分析
    目录一、实例代码HTMLCSSJavaScript二、实例演示三、实例剖析一、实例代码 HTML <!DOCTYPE html> <html lang="en"&g...
    99+
    2022-11-13
  • Javascript框架实例分析
    今天小编给大家分享一下Javascript框架实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。文中的所有代码都基于鸿蒙...
    99+
    2023-06-27
  • Java I/O API性能实例分析
    本篇内容主要讲解“Java I/O API性能实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java I/O API性能实例分析”吧!  一、概述   IO API的可伸缩性对Web应用...
    99+
    2023-06-03
  • JavaScript中的this实例分析
    本篇内容主要讲解“JavaScript中的this实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的this实例分析”吧!普通函数中的 this我们来看例题:请给出下...
    99+
    2023-07-02
  • JavaScript数值number实例分析
    这篇文章主要介绍“JavaScript数值number实例分析”,在日常操作中,相信很多人在JavaScript数值number实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2022-10-19
  • JavaScript作用域实例分析
    这篇文章主要讲解了“JavaScript作用域实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript作用域实例分析”吧!  ...
    99+
    2022-10-19
  • JavaScript原型及实例分析
    今天就跟大家聊聊有关JavaScript原型及实例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。构造函数 实例 原型三者的关系任何函数都有一个prototype属性,该属性是一个...
    99+
    2023-06-22
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作