溫州柳峰鄉(xiāng)HTML 實(shí)現(xiàn)隨意拖動(dòng)內(nèi)容位置
閱讀 13706 · 發(fā)布日期 2020-08-24 11:45 · 溫州優(yōu)光網(wǎng)絡(luò)科技有限公司|建站|APP小程序制作|做網(wǎng)站SEO推廣優(yōu)化
【摘要】
兩種方式為:拖拽普通標(biāo)簽位置或拖拽canvas中的文本框位置1. 實(shí)現(xiàn)鼠標(biāo)拖動(dòng)標(biāo)簽元素到任意位置css 代碼#range {
position: relative;
width: 600px;
height: 400px;
margin: 10px;
background-col... 【溫州小程序開發(fā),溫州微信公眾號(hào),平陽(yáng)做網(wǎng)站,平陽(yáng)網(wǎng)站建設(shè)公司,平陽(yáng)小程序商城制作,昆陽(yáng)萬(wàn)全做網(wǎng)站,鰲江水頭小程序,蕭江騰蛟微信公眾號(hào),山門順溪南雁海西南麂鳳臥麻步懷溪網(wǎng)絡(luò)網(wǎng)店服務(wù),政采云網(wǎng)店管理服務(wù)】...
兩種方式為:
拖拽普通標(biāo)簽位置或拖拽canvas中的文本框位置1. 實(shí)現(xiàn)鼠標(biāo)拖動(dòng)標(biāo)簽元素到任意位置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;
// 拖動(dòng)開始事件,要綁定在被移動(dòng)元素上 icon.addEventListener('
mousedown'
, function (e) {
/* * @des deltaLeft 即移動(dòng)過(guò)程中不變的值 */ deltaLeft = e.clientX-e.target.offsetLeft;
deltaTop = e.clientY-e.target.offsetTop;
move = true;
}
) // 移動(dòng)觸發(fā)事件要放在,區(qū)域控制元素上 main.addEventListener('
mousemove'
, function (e) {
if (move) {
const cx = e.clientX;
const cy = e.clientY;
/** 相減即可得到相對(duì)于父元素移動(dòng)的位置 */ 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`) }
}
) // 拖動(dòng)結(jié)束觸發(fā)要放在,區(qū)域控制元素上 main.addEventListener('
mouseup'
, function (e) {
move = false;
console.log('
mouseup'
);
}
)2. canvas繪制文本框,并實(shí)現(xiàn)鼠標(biāo)將其拖拽移動(dòng)到任意位置css 代碼.cus-canvas{
background: rgb(50, 204, 243);
}
.input-ele{
display: none;
position: fixed;
width: 180px;
border: 0;
background-color: #fff;
}
html 代碼
js代碼實(shí)現(xiàn)原理為記錄鼠標(biāo)移動(dòng)的位置,不斷的重繪矩形框和文本內(nèi)容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 }
/** 設(shè)置文字和邊框樣式 */ ctx.font="16px Arial";
ctx.fillStyle = "#fff";
/** 設(shè)置為 center 時(shí),文字段的中心會(huì)在 fillText的 x 點(diǎn) */ 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左邊界的距離 加上 鼠標(biāo)點(diǎn)擊位置與canvas左邊界的長(zhǎng)度,這個(gè)值是相對(duì)移動(dòng)過(guò)程中不變的值 */ 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左邊界之間的長(zhǎng)度 */ 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() /** 這里如果不調(diào)用 beginPath 歷史的矩形會(huì)重新被繪制 */ ctx.beginPath() ctx.rect(rect.x, rect.y, rect.width, rect.height) ctx.stroke();
// 設(shè)置字體內(nèi)容,以及在畫布上的位置 ctx.fillText(text, rect.x + 70, rect.y + 30);
}
推薦教程:
《HTML教程》以上就是HTML 實(shí)現(xiàn)隨意拖動(dòng)內(nèi)容位置的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
微信
分享相關(guān)標(biāo)簽:
html隨意拖動(dòng) html拖動(dòng)本文轉(zhuǎn)載于:
jb51,如有侵犯,請(qǐng)聯(lián)系[email protected]刪除
上一篇:
HTML5 移動(dòng)端自適應(yīng)布局
下一篇:
HTML 中 meta 大全相關(guān)文章相關(guān)視頻HTML5 和 Flash 區(qū)別?php不顯示html怎么辦HTML如何設(shè)置網(wǎng)頁(yè)標(biāo)題?html文檔的基本結(jié)構(gòu)由哪三對(duì)標(biāo)簽負(fù)責(zé)組織PHP如何使用mpdf將html頁(yè)面轉(zhuǎn)換pdf文件...HTML 實(shí)現(xiàn)隨意拖動(dòng)內(nèi)容位置HTML5中新增加的標(biāo)簽HTML5廢除的元素HTML5新增的屬性和廢除的屬性HTML5的高級(jí)功能介紹 [溫州做網(wǎng)站html教程]