JS文件下载(单个/批量)

彩虹网

前言:

在html5中 a 标签多了一个属性?>download,用户点击a链接浏览器会打开并显示该链接的内容,若在a链接中加了 download 属性,点击该链接就不会打开这个文件,而是直接下载。

注意,download是html5中的a标签的新特性,所以(不支持h5)的低版本浏览器不兼容!

实例1:

单个文件下载: 以下载mp3为例:

重点在于:要在a标签中加上download属性;

音乐下载

怎么样,是不是很简单;

实例2:

多个文件批量下载:

同上面的单个文件下载原理一样,不同点在于:

因为有多个文件,所以就要模拟次点击事件,根据要下载的数量来进行对应的循环生成a标签dom,并循环模拟点击下载事件。

其实现代码如下:

var btn = document.getelementbyid('download-btn'); //将要进行多文件下载的mp3文件地址,以组数的形式存起来(这里只例了3个地址)   
var mp3arr = ["http://www.xxx.com/xxx.mp3", "http://www.xx.com/xxx.mp3", "http://wwww.xxx.com/xxx.mp3"];
function download(name, href) {
    var a = document.createelement("a"), //创建a标签           
        e = document.createevent("mouseevents"); //创建鼠标事件对象       
    e.initevent("click", false, false); //初始化事件对象       
    a.href = href; //设置下载地址       
    a.download = name; //设置下载文件名       
    a.dispatchevent(e); //给指定的元素,执行事件click事件    
}
//给多文件下载按钮添加点击事件   
btn.onclick = function name(params) {
    for (let index = 0; index < mp3arr.length; index++) {
        download('第' + index + '个文件', mp3arr[index]);
    }
}

关于js中的自定义事件的定义和触发(createevent, initevent,dispatchevent)

1、document.createevent(eventtype )   //创建新的 event 对象。

参数:

eventtype 共5种类型:

events :包括所有的事件.

htmlevents:包括 'abort', 'blur', 'change', 'error', 'focus', 'load', 'reset', 'resize', 'scroll', 'select', 'submit', 'unload'. 事件

uieevents :包括 'domactivate', 'domfocusin', 'domfocusout', 'keydown', 'keypress', 'keyup'.间接包含 mouseevents.

mouseevents:包括 'click', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup'.

mutationevents:包括 'domattrmodified', 'domnodeed', 'domnoderemoved', 'domacterdatamodified', 'domnodeedintodocument',

'domnoderemovedfromdocument', 'domsubtreemodified'.

2、event.initevent(eventtype)  //初始化新事件对象的属性

在document.createevent()后必须初始化,其对应的5种对应的初始化方法  htmlevents 和 通用 events:

initevent('type', bubbles, cancelable) uievents: inituievent('type', bubbles, cancelable, windowobject, detail) mouseevents: initmouseevent('type', bubbles, cancelable, windowobject, detail, screenx, screeny, clientx, clienty, ctrlkey, altkey, shiftkey, metakey, button, relatedtarget) mutationevents: initmutationevent('type', bubbles, cancelable, relatednode, prevvalue, newvalue,attrname, attrchange)

3. dom.dispatchevent(event) //给节点分派一个合成事件。

在初始化完成后就可以随时触发需要的事件了,前面的dom就要触发事件的元素,

需要注意的是在ie 5.5+版本上请用fireevent方法,还是浏览兼容的考虑

其他事件例子

1、立即触发鼠标被按下事件

var fireonthis = document.getelementbyidx_x('someid');
var evobj = document.createevent('mouseevents');
evobj.initmouseevent('click', true, true, window, 1, 12, 345, 7, 220, false, false, true, false, 0, null);
fireonthis.dispatchevent(evobj);

2 、考虑兼容性的一个鼠标移动事件

 var fireonthis = document.getelementbyidx_x('someid');
 if (document.createevent) {
     var evobj = document.createevent('mouseevents');
     evobj.initevent('mousemove', true, false);
     fireonthis.dispatchevent(evobj);
 } else if (document.createeventobject) {
     fireonthis.fireevent('onmousemove')

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。