index.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. export default {
  2. name: 'hide-switch',
  3. created (el, binding, vnode) {},
  4. mounted (el, binding, vnode) {
  5. // 为第一个子元素添加样式
  6. el.firstChild.style.overflow = 'hidden'
  7. const pos = (binding.value || 'right').toLowerCase()
  8. if (!['top', 'right', 'bottom', 'left'].includes(pos)) {
  9. console.error('指令hide-switch传入值不合法[\'top\', \'right\', \'bottom\', \'left\']')
  10. return
  11. }
  12. el.style.position = 'relative'
  13. const switchDom = document.createElement('span')
  14. switchDom.style[pos] = '0'
  15. switch (pos) {
  16. case 'top':
  17. switchDom.style.left = '50%'
  18. switchDom.style.transform = 'translate(-50%,calc(-100% + 24px)) rotate(270deg)'
  19. break
  20. case 'right':
  21. switchDom.style.top = '50%'
  22. switchDom.style.transform = 'translate(100%,-50%)'
  23. break
  24. case 'bottom':
  25. switchDom.style.left = '50%'
  26. switchDom.style.transform = 'translate(100%,-50%) rotateY(90deg)'
  27. break
  28. case 'left':
  29. switchDom.style.top = '50%'
  30. switchDom.style.transform = 'translate(-100%,-50%) rotateY(180deg)'
  31. break
  32. }
  33. switchDom.style.display = 'block'
  34. switchDom.style.height = '60px'
  35. switchDom.style.width = '12px'
  36. switchDom.style.position = 'absolute'
  37. switchDom.style.zIndex = '1999'
  38. switchDom.style.backgroundImage = `url(${require('./show.png')})`
  39. switchDom.style.backgroundSize = '100% 100%'
  40. switchDom.style.cursor = 'pointer'
  41. switchDom.onclick = () => {
  42. let judgeData = ''
  43. let updateFiled = ''
  44. let updateMinField = ''
  45. if (['top', 'bottom'].includes(pos)) {
  46. judgeData = el.offsetHeight
  47. updateFiled = 'height'
  48. updateMinField = 'minHeight'
  49. } else if (['left', 'right'].includes(pos)) {
  50. judgeData = el.offsetWidth
  51. updateFiled = 'width'
  52. updateMinField = 'minWidth'
  53. } else {
  54. return
  55. }
  56. if (judgeData) {
  57. el.style[updateFiled] = '0'
  58. el.style[updateMinField] = '0'
  59. el.style.border = 'none'
  60. el.style.padding = '0'
  61. switchDom.style.backgroundImage = `url(${require('./hide.png')})`
  62. } else {
  63. switchDom.style.backgroundImage = `url(${require('./show.png')})`
  64. el.style[updateFiled] = ''
  65. el.style[updateMinField] = ''
  66. el.style.padding = ''
  67. el.style.border = ''
  68. }
  69. }
  70. el.outerHtml = '123'
  71. el.appendChild(switchDom)
  72. }
  73. }