ip_input.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <ul class="ipAdress">
  3. <li v-for="(item,index) in ipAdress" class="saga-border">
  4. <input type="text" @input="checkIpVal(item,index)" @keyup="turnIpPOS(item,index,$event)" v-model="item.value" ref="ipInput" @blur="setDefaultVal(item)">
  5. <!-- <div></div> -->
  6. </li>
  7. <span>:</span>
  8. <li class="saga-border">
  9. <input type="text" @input="checkIpVal(value,4)" @keyup="turnIpPOS(value,4,$event)" v-model="value.value" ref="ipInput" @blur="setDefaultVal(value)">
  10. <!-- <div></div> -->
  11. </li>
  12. </ul>
  13. </template>
  14. <script>
  15. export default {
  16. name: "ipInput",
  17. data() {
  18. return {
  19. ipAdress: [{
  20. value: ''
  21. }, {
  22. value: ''
  23. }, {
  24. value: ''
  25. }, {
  26. value: ''
  27. }],
  28. value: [{
  29. value: ''
  30. }]
  31. }
  32. },
  33. created() {},
  34. mounted() {},
  35. methods: {
  36. //methods
  37. checkIpVal(item, index) {
  38. let self = this;
  39. //确保每个值都处于0-255
  40. let val = item.value;
  41. //当输入的是空格时,值赋为空
  42. val = val.trim();
  43. val = parseInt(val, 10);
  44. if (isNaN(val)) {
  45. val = ''
  46. } else {
  47. if (index == 4) {
  48. val = val < 0 ? 0 : val;
  49. val = val > 65535 ? 65535 : val;
  50. } else {
  51. val = val < 0 ? 0 : val;
  52. val = val > 255 ? 255 : val;
  53. }
  54. }
  55. item.value = val;
  56. },
  57. turnIpPOS(item, index, event) {
  58. let self = this;
  59. let e = event || window.event;
  60. //左箭头向左跳转,左一不做任何措施
  61. if (e.keyCode == 37) {
  62. if (index == 0) {} else {
  63. self.$refs.ipInput[index - 1].focus();
  64. }
  65. }
  66. //删除键把当前数据删除完毕后会跳转到前一个input,左一不做任何处理
  67. if (e.keyCode == 8) {
  68. let val = item.value;
  69. if (index == 0) {} else {
  70. self.$refs.ipInput[index - 1].focus();
  71. }
  72. }
  73. //右箭头、回车键、空格键、冒号均向右跳转,右一不做任何措施
  74. if (e.keyCode == 39 || e.keyCode == 13 || e.keyCode == 32 || e.keyCode == 190) {
  75. if (index == 4) {} else {
  76. self.$refs.ipInput[index + 1].focus();
  77. }
  78. }
  79. },
  80. setDefaultVal(item) {
  81. //当input失去焦点,而ip没有赋值时,会自动赋值为0
  82. let self = this;
  83. let val = item.value;
  84. if (val == '') {
  85. item.value = '0';
  86. }
  87. },
  88. }
  89. }
  90. </script>
  91. <style lang="scss" scoped>
  92. .ipAdress {
  93. display: flex;
  94. align-items: center;
  95. width: 100%;
  96. height: 100%;
  97. margin-right: 10px;
  98. justify-content: space-around;
  99. }
  100. .ipAdress li {
  101. position: relative; // height: 23px;
  102. margin: 2px;
  103. }
  104. ul[class="ipAdress"] input[type="text"] {
  105. border: none;
  106. width: 100%; // height: 23px;
  107. text-align: center;
  108. background: transparent;
  109. }
  110. .ipAdress li div {
  111. position: absolute;
  112. bottom: 2px;
  113. right: 0;
  114. border-radius: 50%;
  115. background: #0190fe;
  116. width: 2px;
  117. height: 2px;
  118. }
  119. /*只需要3个div*/
  120. .ipAdress li:last-child div {
  121. display: none;
  122. }
  123. /*取消掉默认的input focus状态*/
  124. .ipAdress input:focus {
  125. outline: none;
  126. }
  127. </style>