/*
* @Author: zhangyu
* @Email: zhangdulin@outlook.com
* @Date: 2021-06-22 09:05:29
* @LastEditors: zhangyu
* @LastEditTime: 2021-06-25 14:09:39
* @Description:
*/
function isDOM(dom) {
return (typeof HTMLElement === 'function')
? (dom instanceof HTMLElement)
: (dom && (typeof dom === 'object') && (dom.nodeType === 1) && (typeof dom.nodeName === 'string'));
}
function pasteEvent(event) {
//谷歌浏览器的的粘贴文件在这个对象下面
if (event.clipboardData || event.originalEvent) {
var clipboardData = (event.clipboardData || event.originalEvent.clipboardData);
var items = clipboardData.items
//获取文件的属性就在这里获取,打印该对象可以看到相关属性,结果的操作就在items里面,所以需要循环items
let fileObj = null
for (let i = 0; i < items.length; i++) {
// (items[i].type.indexOf("image")
//getAsFile() 此方法只是该浏览器下才会有的方法
fileObj = items[i].getAsFile();
}
return fileObj
// 第一种
// 在上面的代码if处接着写
// if(fileObj !== null) {
// var fileUrl=URL.createObjectURL(blob);
// document.getElementById("imgNode").src=fileUrl;
// }
// URL是一个公用的对象
// 第二种方法是用base64的方法可以实现, 需要借助FileReader对象
// var reader = new FileReader();
// reader.onload = function (event) {
// //event.target.result 即为图片的Base64编码字符串
// var base64_str = event.target.result;
// document.getElementById("imgNode").src=base64_str;
// }
// reader.readAsDataURL(blob);
} else {
return 'errpr-nonsupport'
}
}
/**
* @description: 获取黏贴内容 复制文本内容
* @param {*} clipboardObj.getClipboardData 获取黏贴内容传参dom; clipboardObj.copyToClipBoard 复制传参字符串
* @return {*} Boolean
*/
export const clipboardObj = {
dom: '',
value: '',
getClipboardData(dom) {
const domPaste = (dom && isDOM(dom)) || document.body
domPaste && dom.addEventListener('paste', pasteEvent)
},
copyToClipBoard(value) {
if (document.execCommand) {
var x = document.createElement("INPUT");
console.log(x)
x.setAttribute("type", "text")
x.value = value
document.body.appendChild(x)
x.select();
document.execCommand("Copy");
x.style.display = 'none';
document.body.removeChild(x)
return true;
}
if (window.clipboardData) {
window.clipboardData.setData("Text", value);
return true;
}
return false;
}
}
/**
* @description: 焦点相关功能函数
* @param {*} focus:获取焦点 传入dom;insertAfterText:插入文本 传参dom 文本;getCursortPosition:获取光标位置 传参dom; setCaretPosition: 设置光标位置 传参dom 位置
* @return {*}
*/
export const cursortPosition = {
textDom: '',
value: '',
focus(textDom) {
if (window.getSelection) {
// ie11 10 9 ff safari
textDom.focus() // 解决ff不获取焦点无法定位问题
const range = window.getSelection() // 创建range
range.selectAllChildren(textDom) // range 选择textDom下所有子内容
range.collapseToEnd() // 光标移至最后
} else if (document.selection) {
// ie10 9 8 7 6 5
const range = document.selection.createRange() // 创建选择对象
// var range = document.body.createTextRange();
range.moveToElementText(textDom) // range定位到textDom
range.collapse(false) // 光标移至最后
range.select()
} else {
textDom.focus()
}
},
// 插入文本
insertAfterText(textDom, value) {
var selectRange;
// 文本长度
var length = textDom.value && String(textDom.value+value).length || String(value).length
if (document.selection) {
// IE Support
textDom.focus();
selectRange = document.selection.createRange();
selectRange.text = value;
textDom.focus();
this.setCaretPosition(textDom, length)
return selectRange.text;
} else if (textDom.selectionStart || textDom.selectionStart == '0') {
// Firefox support
const startPos = textDom.selectionStart;
const endPos = textDom.selectionEnd;
const scrollTop = textDom.scrollTop;
textDom.value =
textDom.value.substring(0, startPos) +
value +
textDom.value.substring(endPos, textDom.value.length);
textDom.focus();
textDom.selectionStart = startPos + value.length;
textDom.selectionEnd = startPos + value.length;
textDom.scrollTop = scrollTop;
this.setCaretPosition(textDom, length)
return textDom.value;
} else {
textDom.value += value;
textDom.focus();
this.setCaretPosition(textDom, length)
return textDom.value;
}
},
// 获取光标位置
getCursortPosition(textDom) {
var cursorPos = 0;
if (document.selection) {
// IE Support
textDom.focus();
const selectRange = document.selection.createRange();
selectRange.moveStart('character', -textDom.value.length);
cursorPos = selectRange.text.length;
} else if (textDom.selectionStart || textDom.selectionStart == '0') {
// Firefox support
cursorPos = textDom.selectionStart;
}
return cursorPos;
},
// 设置光标位置
setCaretPosition(textDom, pos) {
if (textDom.setSelectionRange) {
// IE Support
textDom.focus();
textDom.setSelectionRange(pos, pos);
} else if (textDom.createTextRange) {
// Firefox support
const range = textDom.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
}