Maison >interface Web >tutoriel HTML >HTML réalise le déplacement du contenu à volonté

HTML réalise le déplacement du contenu à volonté

Guanhui
Guanhuiavant
2020-07-20 13:06:244679parcourir

HTML réalise le déplacement du contenu à volonté

Les deux méthodes sont : faire glisser la position normale de l'étiquette ou faire glisser la position de la zone de texte dans le canevas

1. Implémenter le glissement des étiquettes avec la souris. Élément à n'importe quelle position

code 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;
}

code html

<p id="range">
    <p class="icon">100*100</p>
</p>

code js

const main = document.getElementById(&#39;range&#39;);
const icon = document.querySelector(&#39;.icon&#39;);
let move = false;
let deltaLeft = 0, deltaTop = 0;

// 拖动开始事件,要绑定在被移动元素上
icon.addEventListener(&#39;mousedown&#39;, function (e) {
    /*
    * @des deltaLeft 即移动过程中不变的值
    */
    deltaLeft = e.clientX-e.target.offsetLeft;
    deltaTop = e.clientY-e.target.offsetTop;
    move = true;
})

// 移动触发事件要放在,区域控制元素上
main.addEventListener(&#39;mousemove&#39;, function (e) {
    if (move) {
        const cx = e.clientX;
        const cy = e.clientY;
        /** 相减即可得到相对于父元素移动的位置 */   
        let dx = cx - deltaLeft
        let dy = cy - deltaTop

        /** 防止超出父元素范围 */
        if (dx < 0) dx = 0
        if (dy < 0) dy = 0
        if (dx > 500) dx = 500
        if (dy > 300) dy = 300
        icon.setAttribute(&#39;style&#39;, `left:${dx}px;top:${dy}px`)
    }
})

// 拖动结束触发要放在,区域控制元素上
main.addEventListener(&#39;mouseup&#39;, function (e) {
    move = false;
    console.log(&#39;mouseup&#39;);
})

2 . Canvas dessine des zones de texte et permet à la souris de les faire glisser et de les déplacer vers n'importe quelle position

code CSS

.cus-canvas{
    background: rgb(50, 204, 243);
}

.input-ele{
    display: none;
    position: fixed;
    width: 180px;
    border: 0;
    background-color: #fff;
}

code html

<p>
    <canvas id="canvas" class="cus-canvas"  width="800" height="600"></canvas>
    <input id="inputEle" class="input-ele"/>
</p>

code js

Le principe de mise en œuvre est d'enregistrer la position du mouvement de la souris et de redessiner en continu le cadre rectangulaire et le contenu du texte

let mouseDown = false;
let deltaX = 0;
let deltaY = 0;
let text = &#39;hello&#39;
const canvas = document.getElementById(&#39;canvas&#39;);
const ctx = canvas.getContext(&#39;2d&#39;);
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 = &#39;center&#39;;
ctx.lineWidth = &#39;2&#39;;
ctx.strokeStyle = &#39;#fff&#39;;

strokeRect()

const inputEle = document.getElementById(&#39;inputEle&#39;);
inputEle.onkeyup =  function(e) {
    if(e.keyCode === 13) {
        text = inputEle.value
        strokeRect()
        inputEle.setAttribute(&#39;style&#39;, `display:none`)
    }
}

canvas.ondblclick = function(e){ 
    inputEle.setAttribute(&#39;style&#39;, `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 < 0) {
            dx = 0;
        } else if (dx > judgeW) {
            dx = judgeW;
        }
        if(dy < 0) {
            dy = 0;
        } else if(dy > judgeH) {
            dy = judgeH;
        }
        rect.x = dx;
        rect.y = dy; 
        strokeRect()
    }
};  
canvas.onmouseup = function(e){ 
    mouseDown = false
};  

/** 清除指定区域 */
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);
}

Tutoriel recommandé : "Tutoriel HTML"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer