手机端长按图片下载

news/2024/11/17 6:33:07/

手机端长按图片下载

  • 一版
    • html
    • 长按事件
    • 下载js
    • 效果图
  • 二版(贴合App)
    • html
    • js
    • 效果图

一版

html

<div id="target"><img src="./timg.jfif" id="img1" class="img1"></img>
</div>
$(function () {// 函数名longpress,参数为: 需长按元素的id、长按之后的逻辑函数funclongPress( function () {drawCanvas("img")})
})

长按事件

function longPress(func) {var timeOutEvent = 0;var imgTags = document.querySelectorAll('img');console.log(imgTags.length)for (var index = 0; index < imgTags.length; index++) {const item = imgTags[index];console.log("foreach")item.addEventListener('touchstart', function (e) {console.log("touchstart")// 开启定时器前先清除定时器,防止重复触发clearTimeout(timeOutEvent);// 开启延时定时器timeOutEvent = window.setTimeout(function () {console.log("touchstart==============" + timeOutEvent)// 调用长按之后的逻辑函数funcfunc();}, 800); // 长按时间为300ms,可以自己设置});item.addEventListener('touchmove', function (e) {console.log("touchmove")e.preventDefault();// 长按过程中,手指是不能移动的,若移动则清除定时器,中断长按逻辑clearTimeout(timeOutEvent);e.preventDefault();/*若阻止默认事件,则在长按元素上滑动时,页面是不滚动的,按需求设置吧 */});item.addEventListener('touchend', function (e) {console.log("touchend")// 若手指离开屏幕时,时间小于我们设置的长按时间,则为点击事件,清除定时器,结束长按逻辑clearTimeout(timeOutEvent);});}}

下载js

(我在项目中没用到),做个备份

需要引入 <script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.js"></script>

/*** 根据window.devicePixelRatio获取像素比*/function DPR() {if (window.devicePixelRatio && window.devicePixelRatio > 1) {return window.devicePixelRatio;}return 1;}/***  将传入值转为整数*/function parseValue(value) {return parseInt(value, 10);};
/*** 绘制canvas*/function drawCanvas(selector) {// 获取想要转换的 DOM 节点const dom = document.querySelector(selector);const box = window.getComputedStyle(dom);
//      DOM 节点计算后宽高const width = parseValue(box.width);const height = parseValue(box.height);// 获取像素比const scaleBy = DPR();// 创建自定义 canvas 元素const canvas = document.createElement('canvas');// 设定 canvas 元素属性宽高为 DOM 节点宽高 * 像素比canvas.width = width * scaleBy;canvas.height = height * scaleBy;// 设定 canvas css宽高为 DOM 节点宽高canvas.style.width = `${width}px`;canvas.style.height = `${height}px`;// 获取画笔const context = canvas.getContext('2d');// 将所有绘制内容放大像素比倍context.scale(scaleBy, scaleBy);// 将自定义 canvas 作为配置项传入,开始绘制html2canvas(dom, {canvas}).then((canvas) => {console.log(canvas)const context = canvas.getContext('2d');// 关闭抗锯齿形context.mozImageSmoothingEnabled = false;context.webkitImageSmoothingEnabled = false;context.msImageSmoothingEnabled = false;context.imageSmoothingEnabled = false;// canvas转化为图片const img = canvas2Image(canvas, canvas.width, canvas.height);saveFile(img.src, "312")console.log(img.src)});}function canvas2Image(canvas, width, height) {const retCanvas = document.createElement('canvas');const retCtx = retCanvas.getContext('2d');retCanvas.width = width;retCanvas.height = height;retCtx.drawImage(canvas, 0, 0, width, height, 0, 0, width, height);const img = document.createElement('img');img.src = retCanvas.toDataURL('image/jpeg'); // 可以根据需要更改格式return img;}/*** 在本地进行文件保存* @param  {String} data     要保存到本地的图片数据* @param  {String} filename 文件名*/function saveFile(data, filename) {const save_link = document.createElementNS('http:www.w3.org/1999/xhtml', 'a');save_link.href = data;save_link.download = filename;const event = document.createEvent('MouseEvents');event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);save_link.dispatchEvent(event);}

效果图

在这里插入图片描述

--------------------------------------我是分割线------------------------------------------------------

二版(贴合App)

html

<div>长按图片保存到图库<div id="target" style="width: 100px;height:auto;"><img id="img"src="image.png"alt="" style="width: 100%;height:auto;"></div></div>

js

function dialog_msg(element, msg, func) {console.log("dialog_msg")var dialogPanel = '<div class="show" style="text-align: center;width: 100vw;height: 30vh;' +'position: fixed;left: 50%;' +'transform: translateX(-50%);bottom: -32rem;' +'text-align: center;transition: bottom 1s ease;background-color: #ececec;">' +'<p style="border-top:5px solid #ececec;;border-bottom: 0.5px solid #ccc;margin: 0;' +'padding: 0.8rem 0;background-color: #fff;" id="saveImg">保存图片</p>' +'<p style="border-top: 5px solid #ececec;margin: 0;padding: 0.8rem 0;background-color: #fff;" id="cancel">取消</p>' +'</div>'$(element).after(dialogPanel);$('.show').css("bottom", "0rem")$('#saveImg').bind('click', function () {func()});$('#cancel').bind('click', function () {console.log()//移除上一次创建的窗口$(this).parent().remove();// $('.show').css("bottom", "-32rem")});}function longPress(func) {var timeOutEvent;var imgTags = document.querySelectorAll('img');console.log(timeOutEvent)for (var index = 0; index < imgTags.length; index++) {const item = imgTags[index];console.log("foreach")item.addEventListener('touchstart', function (e) {console.log("touchstart")// 开启定时器前先清除定时器,防止重复触发clearTimeout(timeOutEvent);console.log("foreach_____________"+timeOutEvent)// 开启延时定时器timeOutEvent = window.setTimeout(function () {console.log("touchstart==============" + timeOutEvent)// 调用长按之后的逻辑函数funcdialog_msg(item, "是否确认保存图片", func)}, 300); // 长按时间为300ms,可以自己设置});item.addEventListener('touchmove', function (e) {console.log("touchmove")e.preventDefault();// 长按过程中,手指是不能移动的,若移动则清除定时器,中断长按逻辑clearTimeout(timeOutEvent);e.preventDefault();/*若阻止默认事件,则在长按元素上滑动时,页面是不滚动的,按需求设置吧 */});item.addEventListener('touchend', function (e) {console.log("touchend")// 若手指离开屏幕时,时间小于我们设置的长按时间,则为点击事件,清除定时器,结束长按逻辑clearTimeout(timeOutEvent);});}
}

效果图

在这里插入图片描述


http://www.ppmy.cn/news/861211.html

相关文章

Android下载网络图片并保存到相册

下载类&#xff0c;可以url下载到相册&#xff0c;记得在清单加权限&#xff0c;6.0代码动态加权限判断&#xff0c;下载图片要在子线程中下载&#xff0c;下载完后广播更新相册 在清单文件里面添加权限&#xff1a; <!--网络--><uses-permission android:name"…

html5 plus 图片下载保存到手机相册

html5plus 接口文档&#xff1a;http://www.html5plus.org/doc/zh_cn/webview.html vue 集成html5plus方法&#xff1a;https://blog.csdn.net/weixin_38641550/article/details/85235297 vue集成plus demo : https://github.com/Shaxin742/vue-webapp-demo 这个是基于html…

网上下载图片并保存到手机里面

MainActivity 里面用的是异步任务下载的图片 package com.jj.rikao_15;import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.A…

数学建模-拟合算法

这里的线性函数指的是参数为线性&#xff0c;而不是变量为线性。 yabx^2是线性的 用的比较多的是多项式拟合和自己定义的 拓展资料&#xff1a;工具箱曲线拟合类型评价解释 文件-导出代码 自动生成的代码修改图名和标签 如果不收敛&#xff0c;自己要修改初始值&#xf…

综合小实验

第一步&#xff1a;计划IP R1的环回&#xff1a;192.168.1.0/28 R2的环回&#xff1a;192.168.1.16/28 R123的O/O/0接口&#xff1a;192.168.1.32/28 R3-4&#xff1a;192.168.1.128/30 Vlan2&#xff1a;192.168.1.48/28 vlan3&#xff1a;192.168.1.64/28 192.168.1.0/24 0区…

Active Directory域服务

1.什么是域服务域内的directory database(目录数据库)被用来存储用户账号&#xff0c;计算机账户&#xff0c;打印机与共享文件夹等对象&#xff0c;而提供目录服务的组件就是Active Directory域服务(Active Directory Domin Service,AD DS)它负责目录数据库的存储、新建、删除…

[个人小记]解决无法与域的active directory域控制器连接

解决无法与域的active directory域控制器连接 一、我的情况二、解决办法 一、我的情况 两台虚拟机&#xff0c;一台是域控&#xff0c;一台是应用服务器&#xff0c;确定常规配置是ok的没有什么问题。 二、解决办法 1、虚机网卡设置桥接并设置好IP使两台虚机在同一个局域网…

3.2.1 安装Active Directory

3.2.1 安装Active Directory 域控制器是通过安装Active Directory来创建的。执行安装Active Directory的账户必须是本地计算机Administrators组的成员&#xff0c;或者是被委派有Administrators的权限。如果将此计算机加 入域&#xff0c;Domain Admins组的成员也可以执行此过…