import Vue from 'vue';
export default {
install() {
Vue.directive('view', {
inserted(el, binding) {
el.onclick = (e) => {
let url = e.target.getAttribute('url');
let $div = document.createElement('div');
$div.setAttribute('id', 'img-view');
document.body.appendChild($div);
$div.innerHTML = `
滚动鼠标滚轮可以放大、缩小图片;点击关闭预览。
`
$div.onclick = (e) => {
$div.removeEventListener('DOMMouseScroll', scrollFunc);
window.onmousewheel = document.onmousewheel = null;
document.body.removeChild($div)
}
let i = 800;
function scrollFunc(e) {
e = e || window.event;
if(e.wheelDelta) {
//IE/Opera/Chrome
if(parseInt(e.wheelDelta) > 0) {
if(i < document.body.clientWidth - 100) {
i += 20;
}
} else {
if(i > 100) {
i -= 20;
}
}
} else if(e.detail) {
//Firefox
if(parseInt(e.wheelDelta) > 0) {
if(i < document.body.clientWidth - 50) {
i += 20;
}
} else {
if(i > 100) {
i -= 20;
}
}
}
$div.getElementsByTagName('img')[0].setAttribute('style','width: ' + i +'px')
}
$div.addEventListener('DOMMouseScroll', scrollFunc, false)
window.onmousewheel = document.onmousewheel = scrollFunc
}
}
})
// 提示框,需要绑定data-txt
Vue.directive('tip', {
inserted(el, binding) {
let $div;
el.addEventListener('mouseover', e => {
const curStyle = window.getComputedStyle(el, ''); // 获取当前元素的style
const textSpan = document.createElement('span'); // 创建一个容器来记录文字的width
// 设置新容器的字体样式,确保与当前需要隐藏的样式相同
textSpan.style.fontSize = curStyle.fontSize;
textSpan.style.fontWeight = curStyle.fontWeight;
textSpan.style.fontFamily = curStyle.fontFamily;
// 将容器插入body,如果不插入,offsetWidth为0
document.body.appendChild(textSpan);
// 设置新容器的文字
textSpan.innerHTML = el.innerText;
let flag = textSpan.offsetWidth >= el.offsetWidth;
if(binding.modifiers.same) {
flag = textSpan.offsetWidth > el.offsetWidth;
}
if (flag) {
let text = e.target.getAttribute('data-txt') || el.innerText,
top = e.clientY - e.offsetY,
left = e.clientX - e.offsetX + e.target.clientWidth/2;
$div = document.createElement('div');
$div.setAttribute('class', 'site-tips');
$div.setAttribute('style', 'top:' + top + 'px;left:' + left + 'px');
$div.innerHTML = text;
document.body.appendChild($div);
}
// 移除刚刚创建的记录文字的容器
document.body.removeChild(textSpan);
})
el.addEventListener('mouseout', e => {
if($div) {
try {
document.body.removeChild($div);
} catch(e) {
}
}
})
}
})
Vue.directive('number-input', {
inserted: (el, binding) => {
el.addEventListener("keypress", (e) =>{
e = e || window.event;
let charcode = e.keyCode || e.which || e.charCode;
if(charcode == 45) {
if(e.target.value && (e.target.value[0] !== '-' || e.target.value[0] === '-')) {
e.preventDefault();
}
return
}
if(binding.modifiers.float && charcode == 46) {
if(!e.target.value || (e.target.value && ((e.target.value[0] === '-' && e.target.value.length < 2) || (e.target.value.length >= 2 && e.target.value.includes('.'))))) {
e.preventDefault();
}
return
}
if(!binding.modifiers.float && charcode == 46) {
e.preventDefault();
return;
}
if(charcode!=8 && charcode!=46 && charcode!=45 && (charcode<48 || charcode>57)){
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
}
});
el.addEventListener("paste", () => false);
el.addEventListener("dragenter", () => false);
el.addEventListener("keyup", (e) => {
e.target.value = e.target.value.replace(/[^\d.-]/gi,'');
});
}
})
Vue.directive('trim', {
inserted: (el) => {
el.addEventListener("keypress", (e) =>{
e = e || window.event;
let charcode = e.keyCode || e.which || e.charCode;
if(charcode === 32) {
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
return;
}
})
}
})
Vue.directive('loadmore', {
bind(el, binding) {
el.addEventListener('scroll', function() {
let sign = 100
const scrollDistance = this.scrollHeight - this.scrollTop - this.clientHeight
if (scrollDistance <= sign) {
binding.value()
}
}, true)
}
})
// 输入框输入校验
Vue.directive('float', {
inserted: (el) =>{
el.addEventListener("keypress", (e) =>{
e = e || window.event;
let charcode = e.keyCode || e.which || e.charCode;
let val = e.target.value
if(val === '-') {
if(charcode < 48 || charcode > 57) {
e.preventDefault()
e.returnValue = false;
return
}
} else if(val === '-0' || val === '0') {
if(charcode !== 46) {
e.preventDefault()
e.returnValue = false
return
}
} else {
if(val.indexOf('.') !== -1) {
// 只能输入0-9
if(charcode < 48 || charcode > 57) {
e.preventDefault()
e.returnValue = false;
return
}
} else {
if(val.length) {
// 只能输入0-9和.
if((charcode < 48 || charcode > 57) && charcode != 46) {
e.preventDefault()
e.returnValue = false
return
}
} else {
// 只能输入0-9 . -
if((charcode < 48 || charcode > 57) && charcode != 46 && charcode != 45) {
e.preventDefault()
e.returnValue = false
return
}
}
}
}
});
el.addEventListener("paste", () => {
// el.addEventListener('keyup', e => {
// setTimeout(() => {
// }, 100);
// })
// el.addEventListener('blur', e => {
// e.target.value = e.target.value.replace(/[^0-9-]*((0{1}|[1-9]\d*)(\.\d{1,})?).*$/, '$1')
// })
// e.preventDefault()
// e.returnValue = false
// return
});
el.addEventListener("dragenter", () => false);
}
})
Vue.directive('txt-tip',{
inserted(el, binding) {
let $div;
el.addEventListener('mouseover', e => {
// alert("111")
const curStyle = window.getComputedStyle(el, ''); // 获取当前元素的style
const textSpan = document.createElement('span'); // 创建一个容器来记录文字的width
// 设置新容器的字体样式,确保与当前需要隐藏的样式相同
textSpan.style.fontSize = curStyle.fontSize;
textSpan.style.fontWeight = curStyle.fontWeight;
textSpan.style.fontFamily = curStyle.fontFamily;
textSpan.style.color = curStyle.color;
// 将容器插入body,如果不插入,offsetWidth为0
document.body.appendChild(textSpan);
// 设置新容器的文字
textSpan.innerHTML = el.innerText;
let flag = textSpan.offsetWidth >= el.offsetWidth;
if(binding.modifiers.same) {
flag = textSpan.offsetWidth > el.offsetWidth;
}
// if (flag) {
let text = e.target.getAttribute('data-txt') || el.innerText,
top = e.clientY+10,
left = e.clientX+10;
$div = document.createElement('div');
$div.setAttribute('class', 'text-tips');
$div.setAttribute('style', 'top:' + top + 'px;left:' + left + 'px');
$div.innerHTML = text;
$div.style.color=curStyle.color;
$div.style.borderColor=curStyle.color
document.body.appendChild($div);
// }
// 移除刚刚创建的记录文字的容器
document.body.removeChild(textSpan);
})
el.addEventListener('mouseout', e => {
if($div) {
try {
document.body.removeChild($div);
} catch(e) {
}
}
})
}
})
Vue.directive('left-txt-tip',{
inserted(el, binding) {
let $div;
el.addEventListener('mouseover', e => {
const curStyle = window.getComputedStyle(el, ''); // 获取当前元素的style
const textSpan = document.createElement('span'); // 创建一个容器来记录文字的width
// 设置新容器的字体样式,确保与当前需要隐藏的样式相同
textSpan.style.fontSize = curStyle.fontSize;
textSpan.style.fontWeight = curStyle.fontWeight;
textSpan.style.fontFamily = curStyle.fontFamily;
textSpan.style.color = curStyle.color;
// 将容器插入body,如果不插入,offsetWidth为0
document.body.appendChild(textSpan);
// 设置新容器的文字
textSpan.innerHTML = el.innerText;
let flag = textSpan.offsetWidth >= el.offsetWidth;
if(binding.modifiers.same) {
flag = textSpan.offsetWidth > el.offsetWidth;
}
let text = e.target.getAttribute('data-txt') || el.innerText,
top = e.clientY+10,
left = e.clientX-40;
$div = document.createElement('div');
$div.setAttribute('class', 'text-tips');
$div.setAttribute('style', 'top:' + top + 'px;left:' + left + 'px');
$div.innerHTML = text;
$div.style.color=curStyle.color;
$div.style.borderColor=curStyle.color
document.body.appendChild($div);
document.body.removeChild(textSpan);
})
el.addEventListener('mouseout', e => {
if($div) {
try {
document.body.removeChild($div);
} catch(e) {
}
}
})
el.addEventListener('click', e => {
if($div) {
try {
document.body.removeChild($div);
} catch(e) {
}
}
})
}
})
Vue.directive('bottom-txt-tip',{
inserted(el, binding) {
let $div;
el.addEventListener('mouseover', e => {
const curStyle = window.getComputedStyle(el, ''); // 获取当前元素的style
const textSpan = document.createElement('span'); // 创建一个容器来记录文字的width
// 设置新容器的字体样式,确保与当前需要隐藏的样式相同
textSpan.style.fontSize = curStyle.fontSize;
textSpan.style.fontWeight = curStyle.fontWeight;
textSpan.style.fontFamily = curStyle.fontFamily;
textSpan.style.color = curStyle.color;
// 将容器插入body,如果不插入,offsetWidth为0
document.body.appendChild(textSpan);
// 设置新容器的文字
textSpan.innerHTML = el.innerText;
let flag = textSpan.offsetWidth >= el.offsetWidth;
if(binding.modifiers.same) {
flag = textSpan.offsetWidth > el.offsetWidth;
}
let text = e.target.getAttribute('data-txt') || el.innerText,
top = e.clientY+20,
left = e.clientX-40;
$div = document.createElement('div');
$div.setAttribute('class', 'text-gray-tips');
$div.setAttribute('style', 'top:' + top + 'px;left:' + left + 'px');
$div.innerHTML = text;
$div.style.color=curStyle.color;
document.body.appendChild($div);
document.body.removeChild(textSpan);
})
el.addEventListener('mouseout', e => {
if($div) {
try {
document.body.removeChild($div);
} catch(e) {
}
}
})
el.addEventListener('click', e => {
if($div) {
try {
document.body.removeChild($div);
} catch(e) {
}
}
})
}
})
}
}