第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

React - 拖動(dòng)元素的角以調(diào)整內(nèi)容大小

React - 拖動(dòng)元素的角以調(diào)整內(nèi)容大小

慕碼人2483693 2022-10-08 17:13:59
我正在開(kāi)發(fā)我的 React 項(xiàng)目中的一項(xiàng)功能,當(dāng)用戶將鼠標(biāo)懸停在可能包含圖像或僅包含文本的元素上時(shí),左上角會(huì)出現(xiàn)一個(gè)調(diào)整大小按鈕,并且在拖動(dòng)鼠標(biāo)時(shí)按下該按鈕將調(diào)整大小元素及其相應(yīng)的內(nèi)容。我已經(jīng)實(shí)現(xiàn)了在懸停時(shí)顯示調(diào)整大小按鈕,但是在實(shí)現(xiàn)調(diào)整大小功能時(shí)遇到了困難。作為參考,我附上了我正在嘗試實(shí)現(xiàn)的 GIF。 調(diào)整元素大小
查看完整描述

2 回答

?
呼喚遠(yuǎn)方

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊

如果您已經(jīng)添加了一個(gè)固定在要調(diào)整大小的角上的調(diào)整大小按鈕div

  1. 監(jiān)聽(tīng)mousedown按鈕上的事件

  2. 在聽(tīng)者中,

    • 存儲(chǔ)起始尺寸和點(diǎn)擊位置

    • 添加一個(gè)mousemove監(jiān)聽(tīng)onMouseMove器來(lái)document.body跟蹤光標(biāo)位置

    • 添加一個(gè)監(jiān)聽(tīng)器,當(dāng)拖動(dòng)被釋放時(shí)mouseup移除mouseMove

  3. 使用光標(biāo)位置的變化來(lái)div適當(dāng)?shù)卣{(diào)整大小。

例子:

const { useState } = React;


function Resizeable({ children }) {

  const [size, setSize] = useState({ x: 400, y: 300 });


  const handler = (mouseDownEvent) => {

    const startSize = size;

    const startPosition = { x: mouseDownEvent.pageX, y: mouseDownEvent.pageY };

    

    function onMouseMove(mouseMoveEvent) {

      setSize(currentSize => ({ 

        x: startSize.x - startPosition.x + mouseMoveEvent.pageX, 

        y: startSize.y - startPosition.y + mouseMoveEvent.pageY 

      }));

    }

    function onMouseUp() {

      document.body.removeEventListener("mousemove", onMouseMove);

      // uncomment the following line if not using `{ once: true }`

      // document.body.removeEventListener("mouseup", onMouseUp);

    }

    

    document.body.addEventListener("mousemove", onMouseMove);

    document.body.addEventListener("mouseup", onMouseUp, { once: true });

  };


  return (

    <div id="container" style={{ width: size.x, height: size.y }}>

      <button id="draghandle" type="button" onMouseDown={handler} >Resize</button>

    </div>

  );

}


ReactDOM.render(<Resizeable />, document.getElementById("root"));

#root {

  height: 100vh;

  width: 100vw;

}


#container {

  position: relative;

  background-color: lightpink;

  border: solid red 1px;

}


#draghandle {

  position: absolute;

  bottom: 0;

  right: 0;

  transform: translate(50%, 50%);

}

<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>

<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>


<div id="root"></div>

請(qǐng)注意,只有mousedown事件應(yīng)用于button,而其他處理程序應(yīng)用于document.body。這可確??焖賹⒐鈽?biāo)移離button不會(huì)導(dǎo)致錯(cuò)過(guò)事件。



查看完整回答
反對(duì) 回復(fù) 2022-10-08
?
蝴蝶不菲

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

所以你需要三個(gè)信息來(lái)做到這一點(diǎn)。鼠標(biāo)第一次單擊調(diào)整大小手柄時(shí)的位置、鼠標(biāo)移動(dòng)時(shí)的位置以及元素的高度和寬度。


從獲取元素的高度和寬度開(kāi)始:


const [height, setHeight] = useState({ height: 20 }); // initialise to 20px

const [dragging, setDragging] = useState(false);

/** -- snip -- **/

<img style={{ height }} /* snip */ />

有了圖片,html會(huì)自動(dòng)為你處理縮放,所以你只需要應(yīng)用height屬性,width就會(huì)自動(dòng)縮放。


現(xiàn)在我們需要獲取resize手柄的鼠標(biāo)onClick的位置。我假設(shè)您已經(jīng)有了手柄的樣式,所以我們可以忽略它:


const [mouseStart, setMouseStart] = useState({ x: 0, y: 0 });

/** -- snip -- */

<ResizeHandle 

    onMouseDown={e => {

      setDragging(true);

      setMouseStart({ x: e.offsetX, y: e.offsetY });

    }}

/> 

然后你需要監(jiān)聽(tīng) mouseMove 事件并適當(dāng)調(diào)整 img 的大小 - 這應(yīng)該在父組件中完成:


  <div

     onMouseMove={e => {

        if (dragging) {

          const pixelDifference = Math.max(mouseStart.x - e.offsetX, mouseStart.y - e.offsetY);

          setHeight(height + pixelDifference);

        }

     }}


     onMouseUp={() => setDragging(false)}

  >

     <img /* snip */ />

     <ResizeHandle /* snip */ />

  </div>


查看完整回答
反對(duì) 回復(fù) 2022-10-08
  • 2 回答
  • 0 關(guān)注
  • 321 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)