This article shares with you how to implement draggable and draggable components in Vue for your reference. The specific content is as follows describe:The component only encapsulates the drag function, and the content is customized through the #header, #default, and #footer slots Effect:Code:<template> <div ref="wrapper" class="drag-bar-wrapper" > <div ref="header" class="drag-bar-header" > <!-- Header area --> <slot name="header" /> </div> <div class="drag-bar-content"> <!-- Main content area --> <slot name="default" /> </div> <div class="drag-bar-footer"> <!-- Bottom area --> <slot name="footer" /> </div> </div> </template> <script> export default { data() { return { wrapperDom: null, headerDom: null, disX: 0, disY: 0, minLeft: 0, maxLeft: 0, minTop: 0, maxTop: 0, prevLeft: 0, prevTop: 0, }; }, methods: { initDrag() { this.wrapperDom = this.$refs.wrapper; this.headerDom = this.$refs.header; this.headerDom.addEventListener('mousedown', this.onMousedown, false);//Click on the header area and drag}, onMousedown(e) { this.disX = e.clientX - this.headerDom.offsetLeft; this.disY = e.clientY - this.headerDom.offsetTop; this.minLeft = this.wrapperDom.offsetLeft; this.minTop = this.wrapperDom.offsetTop; this.maxLeft = window.innerWidth - this.minLeft - this.wrapperDom.offsetWidth; this.maxTop = window.innerHeight - this.minTop - this.wrapperDom.offsetHeight; const { left, top } = getComputedStyle(this.wrapperDom, false); this.prevLeft = parseFloat(left); this.prevTop = parseFloat(top); document.addEventListener('mousemove', this.onMousemove, false); document.addEventListener('mouseup', this.onMouseup, false); document.body.style.userSelect = 'none'; //Eliminate the interference of selected text during dragging}, onMousemove(e) { let left = e.clientX - this.disX; let top = e.clientY - this.disY; if (-left > this.minLeft) { left = -this.minLeft; } else if (left > this.maxLeft) { left = this.maxLeft; } if (-top > this.minTop) { top = -this.minTop; } else if (top > this.maxTop) { top = this.maxTop; } this.wrapperDom.style.left = this.prevLeft + left + 'px'; this.wrapperDom.style.top = this.prevTop + top + 'px'; }, onMouseup() { document.removeEventListener('mousemove', this.onMousemove, false); document.removeEventListener('mouseup', this.onMouseup, false); document.body.style.userSelect = 'auto'; //Restore text to be selectable}, }, mounted() { this.initDrag(); } }; </script> <style scoped> .drag-bar-wrapper { position: fixed; z-index: 2; top: 50%; left: 50%; transform: translate(-50%, -50%); display: flex; flex-direction: column; } .drag-bar-header { background-color: #eee; cursor: move; /*Drag mouse style*/ } .drag-bar-content { background-color: #fff; } .drag-bar-footer { background-color: #fff; } </style> The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM. You may also be interested in:
|
<<: Detailed explanation of the use of Linux time command
>>: MySQL paging query method for millions of data volumes and its optimization suggestions
Table of contents 1. Listening for events 2. Pass...
This article example shares the specific code of ...
This article example shares the specific code of ...
If you want to hide content from users of phones, ...
Table of contents What is a plugin Writing plugin...
Since Zabbix version 3.0, it has supported encryp...
Recently, a problem occurred in the project. The ...
If you use docker search centos in Docker Use doc...
In MySQL, databases correspond to directories wit...
Responsive layout systems are already very common...
accomplish This effect is difficult to replicate ...
As we all know, SSH is currently the most reliabl...
This article shares the MySQL free installation c...
Table of contents background Problem location Fur...
Note: sg11 Our company only supports self-install...