123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- 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 = `<i class="el-icon-error"></i>
- <span>滚动鼠标滚轮可以放大、缩小图片;点击关闭预览。</span>
- <img src="` + url + `" width="800"/>`
- $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) {
- }
- }
- })
- }
- })
- }
- }
|