溫州楓嶺鄉(xiāng)HTML 實現隨意拖動內容位置

閱讀 13336  ·  發(fā)布日期 2020-08-24 11:45  ·  溫州優(yōu)光網絡科技有限公司|建站|APP小程序制作|做網站SEO推廣優(yōu)化
【摘要】 兩種方式為:拖拽普通標簽位置或拖拽canvas中的文本框位置1. 實現鼠標拖動標簽元素到任意位置css 代碼#range { position: relative; width: 600px; height: 400px; margin: 10px; background-col... 【溫州小程序開發(fā),溫州微信公眾號,平陽做網站,平陽網站建設公司,平陽小程序商城制作,昆陽萬全做網站,鰲江水頭小程序,蕭江騰蛟微信公眾號,山門順溪南雁海西南麂鳳臥麻步懷溪網絡網店服務,政采云網店管理服務】...

HTML 實現隨意拖動內容位置

兩種方式為:
拖拽普通標簽位置或拖拽canvas中的文本框位置1. 實現鼠標拖動標簽元素到任意位置css 代碼#range {
position: relative;
width: 600px;
height: 400px;
margin: 10px;
background-color: rgb(133, 246, 250);
}
.icon {
position: absolute;
height: 100px;
width: 100px;
cursor: move;
background-color: #ff9204;
user-select: none;
}
html代碼

100*100

js代碼const main = document.getElementById('
range'
);
const icon = document.querySelector('
.icon'
);
let move = false;
let deltaLeft = 0, deltaTop = 0;
// 拖動開始事件,要綁定在被移動元素上 icon.addEventListener('
mousedown'
, function (e) {
/* * @des deltaLeft 即移動過程中不變的值 */ deltaLeft = e.clientX-e.target.offsetLeft;
deltaTop = e.clientY-e.target.offsetTop;
move = true;
}
) // 移動觸發(fā)事件要放在,區(qū)域控制元素上 main.addEventListener('
mousemove'
, function (e) {
if (move) {
const cx = e.clientX;
const cy = e.clientY;
/** 相減即可得到相對于父元素移動的位置 */ let dx = cx - deltaLeft let dy = cy - deltaTop /** 防止超出父元素范圍 */ if (dx 500) dx = 500 if (dy > 300) dy = 300 icon.setAttribute('
style'
, `left:${
dx}
px;
top:${
dy}
px`) }
}
) // 拖動結束觸發(fā)要放在,區(qū)域控制元素上 main.addEventListener('
mouseup'
, function (e) {
move = false;
console.log('
mouseup'
);
}
)2. canvas繪制文本框,并實現鼠標將其拖拽移動到任意位置css 代碼.cus-canvas{
background: rgb(50, 204, 243);
}
.input-ele{
display: none;
position: fixed;
width: 180px;
border: 0;
background-color: #fff;
}
html 代碼

js代碼實現原理為記錄鼠標移動的位置,不斷的重繪矩形框和文本內容let mouseDown = false;
let deltaX = 0;
let deltaY = 0;
let text = '
hello'
const canvas = document.getElementById('
canvas'
);
const ctx = canvas.getContext('
2d'
);
const cw = canvas.width, ch = canvas.height;
const rect = {
x: 20, y: 20, width: 150, height: 50 }
/** 設置文字和邊框樣式 */ ctx.font="16px Arial";
ctx.fillStyle = "#fff";
/** 設置為 center 時,文字段的中心會在 fillText的 x 點 */ ctx.textAlign = '
center'
;
ctx.lineWidth = '
2'
;
ctx.strokeStyle = '
#fff'
;
strokeRect() const inputEle = document.getElementById('
inputEle'
);
inputEle.onkeyup = function(e) {
if(e.keyCode === 13) {
text = inputEle.value strokeRect() inputEle.setAttribute('
style'
, `display:none`) }
}
canvas.ondblclick = function(e){
inputEle.setAttribute('
style'
, `left:${
e.clientX}
px;
top:${
e.clientY}
px;
display:block`);
inputEle.focus();
}
canvas.onmousedown = function(e){
/** 獲取視口左邊界與canvas左邊界的距離 加上 鼠標點擊位置與canvas左邊界的長度,這個值是相對移動過程中不變的值 */ deltaX=e.clientX - rect.x;
deltaY=e.clientY - rect.y;
mouseDown = true }
;
const judgeW = cw-rect.width, judgeH = ch-rect.height;
canvas.onmousemove = function(e){
if(mouseDown) {
/** 相減即可獲得矩形左邊界與canvas左邊界之間的長度 */ let dx = e.clientX-deltaX;
let dy = e.clientY-deltaY;
if(dx dx = 0;
}
else if (dx > judgeW) {
dx = judgeW;
}
if(dy dy = 0;
}
else if(dy > judgeH) {
dy = judgeH;
}
rect.x = dx;
rect.y = dy;
strokeRect() }
}
;
canvas.onmouseup = function(e){
mouseDown = false }
;
/** 清除指定區(qū)域 */ function clearRect() {
ctx.clearRect(0, 0, cw, ch) }
/** 畫矩形 */ function strokeRect() {
clearRect() /** 這里如果不調用 beginPath 歷史的矩形會重新被繪制 */ ctx.beginPath() ctx.rect(rect.x, rect.y, rect.width, rect.height) ctx.stroke();
// 設置字體內容,以及在畫布上的位置 ctx.fillText(text, rect.x + 70, rect.y + 30);
}
推薦教程:
《HTML教程》以上就是HTML 實現隨意拖動內容位置的詳細內容,更多請關注php中文網其它相關文章!
微信
分享相關標簽:
html隨意拖動 html拖動本文轉載于:
jb51,如有侵犯,請聯系[email protected]刪除
上一篇:
HTML5 移動端自適應布局
下一篇:
HTML 中 meta 大全相關文章相關視頻HTML5 和 Flash 區(qū)別?php不顯示html怎么辦HTML如何設置網頁標題?html文檔的基本結構由哪三對標簽負責組織PHP如何使用mpdf將html頁面轉換pdf文件...HTML 實現隨意拖動內容位置HTML5中新增加的標簽HTML5廢除的元素HTML5新增的屬性和廢除的屬性HTML5的高級功能介紹 [溫州做網站html教程]