<!DOCTYPE html>
<html>
<head> <style> #mydiv { width: 200px; height: 200px; background-color: red; position: absolute; cursor: move; } </style> |
</head>
<body> <div id="mydiv">拖拽我</div> <script> var mydiv = document.getElementById('mydiv'); var x = 0, y = 0; var limitX = window.innerWidth - 200; var limitY = window.innerHeight - 200; mydiv.onmousedown = function(e) { x = e.clientX - mydiv.getBoundingClientRect().left; y = e.clientY - mydiv.getBoundingClientRect().top; document.onmousemove = function(e) { var newX = e.clientX - x; var newY = e.clientY - y; if (newX < 0) newX = 0; if (newY < 0) newY = 0; if (newX > limitX) newX = limitX; if (newY > limitY) newY = limitY; mydiv.style.left = newX + 'px'; mydiv.style.top = newY + 'px'; }; document.onmouseup = function() { document.onmousemove = null; }; }; </script>
</body>
</html>
<template><div class="drag-box"><div id="dragContent"><div class="drag-home"><div class="drag-title" v-show="titleVisible">软<br>键<br>盘</div><div class="drag-switch"><div class="message"><div class="name">液压支架</div><div class="info">当前操作:前立柱升</div><div class="info">当前操作:前立柱升</div></div><div class="drag-button"><div class="menu"><el-button type="primary" round>采煤机</el-button><el-button type="success" round>液压知己</el-button><el-button type="info" round>总控开关</el-button></div><div class="stats"><el-button type="success" round v-for="(item, index) in 9" :key="index" style="width: 8rem;">按钮{{ item }}</el-button><i v-for="item in 9" :key="item"></i></div><div class="submit"><el-button type="primary" round>启动</el-button><el-button type="success" round>停止</el-button></div></div></div></div></div></div>
</template><script>
import { reactive, toRefs, onBeforeMount, onMounted, getCurrentInstance } from 'vue'export default {components: {},setup() {const state = reactive({rightDistance: '',leftWidth: '',maxWidth: '',titleVisible: false})onBeforeMount(() => {})onMounted(() => {var dragContent = document.getElementById('dragContent');var x = 0, y = 0;var limitX = window.innerWidth - 400; state.maxWidth = limitXvar limitY = window.innerHeight - 600; var box = document.getElementById("dragContent")box.addEventListener('mouseover', () => {if (state.drightDistance == 0) {box.style.left = `${state.maxWidth / 10}rem`box.style.transitionDuration = '1s'setTimeout(() => {state.titleVisible = false}, 300)} else {box.style.transitionDuration = '0s'}})box.addEventListener('mouseout', () => {if (state.drightDistance == 0) {box.style.left = `${state.maxWidth / 10 + 40}rem`box.style.transitionDuration = '1s'setTimeout(() => {state.titleVisible = true}, 300)} else {box.style.transitionDuration = '0s'}});dragContent.onmousedown = (e) => {x = e.clientX - dragContent.getBoundingClientRect().left;y = e.clientY - dragContent.getBoundingClientRect().top;document.onmousemove = function (e) {var newX = e.clientX - x;var newY = e.clientY - y;if (newX < 0) newX = 0; if (newY < 0) newY = 0; if (newX > limitX) newX = limitX; if (newY > limitY) newY = limitY; dragContent.style.left = newX + 'px';dragContent.style.top = newY + 'px';state.leftWidth = newXstate.drightDistance = limitX - newX};document.onmouseup = () => {document.onmousemove = null; console.log('当前坐标点', state.drightDistance)if (state.drightDistance == 0) {}}}})return {...toRefs(state),}}
}
</script>
<style lang="scss" scoped>
.drag-box {width: 100%;height: 100vh;overflow: hidden;position: absolute;
}#dragContent {width: 400px;height: 600px;position: absolute;right: 8rem;top: 50%;cursor: move;.drag-home {height: 100%;position: relative;background-color: #091659;border-radius: 3rem;.drag-title {position: absolute;left: -4rem;top: calc(50% - 8rem);font-size: 2rem;width: 4rem;height: 16rem;background: #0b133d;display: flex;align-items: center;justify-content: center;border-radius: 1rem 0 0 1rem}.drag-switch {height: 100%;position: relative;.message {text-align: left;padding: 2rem;.name {font-size: 2.5rem;margin: 0.5rem 0;}.info {font-size: 1.4rem;margin: 0.3rem 0;}}.drag-button {height: 80%;background: #22387b;position: absolute;bottom: 0;width: 90%;left: 5%;border-radius: 2rem;.menu {margin: 1rem 0;height: 10%;}.stats {height: 75%;justify-content: space-around;align-content: start;display: flex;flex-wrap: wrap;.el-button {margin: 1rem 0;}.el-button+.el-button {margin-left: unset;}i {margin: 1rem 0;width: 8rem;}}.submit {height: 15%;}}}}
}
</style>