1. 程式人生 > >React+dva實現元件拖拽

React+dva實現元件拖拽

React+dva通過Resizable實現元件拖拽

1、通過npm install –save react-resizable命令安裝依賴包

2、該例項採用的是es6語法,在state中定義初始值。
defaultUpHeight儲存的是拖拽停止時上半部分元件的當前高度
defaultDownDownHeight儲存的是拖拽停止時下半部分元件的當前高度
upHeight和downHeight是進行拖拽時上方和下方元件的高度,此時兩個元件的高度是動態變化的。

 state: {
    defaultUpHeight: 410,
    defaultDownHeight: 455
, upHeight: 410, downHeight: 455,
},

3、在models/demo.js獲取改變後的高度

effects: {
    * onResizable({payload}, {put}) {
      yield put({
        type: 'updateState',
        payload: {
          upHeight: payload.upHeight,
          downHeight: payload.downHeight
        }
      })
    },
  },
  * onResizableStop({payload}, {put}) {
    yield
put({ type: 'updateState', payload: { defaultUpHeight: payload.defaultUpHeight, defaultDownHeight: payload.defaultDownHeight, } }) },

4、在index.js中使用Resizable,onResize在元件進行拖拽時觸發,onResizeStop在元件停止拖拽時觸發,詳情見程式碼

import React from 'react';
import {connect} from 'dva'
; import PropTypes from 'prop-types'; import {Layout, Card} from 'antd'; import Resizable from 're-resizable'; const {Sider} = Layout; function Demo({location, demo, loading, dispatch}) { const {defaultUpHeight, defaultDownHeight, upHeight, downHeight} = demo const onResizable = (d) => { dispatch({ type: 'demo/onResizable', payload: { upHeight: defaultUpHeight + d.height, downHeight: defaultDownHeight - d.height, } }) }; const onResizableStop = (ds) => { dispatch({ type: 'demo/onResizableStop', payload: { defaultUpHeight: defaultUpHeight + ds.height, defaultDownHeight: defaultDownHeight - ds.height, } }) }; const style = { display: 'flex', border: 'solid 1px #ddd', backgroundColor: '#ffffff', }; return ( <div> <Layout style={{width: '100%', height: 870}}> <Sider width="330" style={{height: 870}}> <Resizable style={style} maxHeight={800} onResizeStop={(e, d, ev, ds) => { onResizableStop(ds) }} onResize={(e, direction, ref, d) => { onResizable(d); }} > <Card title={"Card1"} bordered={true} style={{width: 330, height: upHeight, userSelect: 'none'}} bodyStyle={{height: upHeight - 30, padding: 12}} > Card1 </Card> </Resizable> <Card title={"Card2"} bordered={true} style={{width: 330, height: downHeight, userSelect: 'none'}} bodyStyle={{height: downHeight - 30, padding: 12}} > Card2 </Card> </Sider> </Layout> </div> ) } Demo.propTypes = { demo: PropTypes.object, loading: PropTypes.object, }; export default connect(({demo, loading}) => ({demo, loading}))(Demo);

相關推薦

React+dva實現元件

React+dva通過Resizable實現元件拖拽 1、通過npm install –save react-resizable命令安裝依賴包 2、該例項採用的是es6語法,在state中定義初始值。 defaultUpHeight儲存的是

使用TypeScript給Vue 3.0寫一個指令實現元件

最近在用vue3重構後臺的一個功能。一個彈窗元件,彈出一個表單。然後點選提交。 早上運維突然跑過來問我,為啥彈窗擋住了下邊的表格的資料,我新增的時候,都沒法對照表格來看了。你必須給我解決一下。 我參考了一下幾大Vue的ui元件庫。發現element iview antv。好像都沒這個功能。為啥運維需要這個

JS 實現控制元件/

下面是實現控制元件拖拽的完整程式碼。 (function ($) { var move = false; //標記控制元件是否處於被拖動狀態 var dragOffsetX = 0; //控制元件左邊界和滑鼠X軸的差

vue中實現基礎元件——元件

前言 pc端開發需要拖拽元件完成列表的順序交換,一般移動端的UI元件會包含,但是我在用的iview並沒有此功能的元件,於是手寫一個,實現起來很簡單。效果圖如下: 可以拖拽完成新排序,點選某一項可以觸發相關事件. 關於拖拽 drag & drop 拖放(

實現移動的懸浮按鈕

前言:   最近想要實現一個可拖拽移動的FAB按鈕,這裡記錄一下個人的思路與經驗。 如何監聽FAB按鈕的移動?   我們可以實現View.OnTouchListener介面,在onTouch( )方法中獲取FAB按鈕移動時的位置引數。或者可以選擇複寫View自身的onT

Android實現的懸浮框

前言:   最近遇到一個開發需求,機器人在使用ASR(語音識別)時,需要將使用者說的話,在機器人胸前的互動螢幕上展示出來,也就是展示出相應的字幕。關鍵有一個要求就是可將字幕進行拖拽。。。(怎麼樣,這個需求夠變態吧,雖從正常互動的角度認為這樣完全沒必要,並簡單交涉了下,結果很無奈,你懂得。

基於Vue實現可以排序的樹形表格

專案需要一個可以拖拽排序的樹形表格,github上搜了一下,併為找到,大部分都不支援拖拽,所以自己實現了一個簡單的元件,已開源 原始碼在這裡,併發布到npm上,如果有類似需求可以試一下,chrome上沒有任何問題 效果圖如下: drag-tree-table 使用方式

WPF自定義控制元件到介面報錯-未將物件設定到引用的例項

WPF自定義控制元件拖拽到介面報錯-未將物件設定到引用的例項 若給自定義控制元件註冊了許多屬性,那麼在拖拽使用這個控制元件時可能會引起這個錯誤。原因是控制元件初始化時,各個屬性未被顯式賦值。 解決辦法,給控制元件向外暴漏一初始化的方法,類似於這樣 public void XX

【JavaScript】實現元素和碰撞檢測

function drag() { var src1 = document.getElementById("src-1"); var src2 = document.getElementById("src-2"); var src3 =

基於Vue實現可以的樹形表格(原創)

  因業務需求,需要一個樹形表格,並且支援拖拽排序,任意未知插入,github搜了下,真不到合適的,大部分樹形表格都沒有拖拽功能,所以決定自己實現一個。這裡分享一下實現過程,專案原始碼請看github,外掛已打包封裝好,釋出到npm上  本博文會分為兩部分,第一部分為使用方式,第二部分為實現方式 安裝方式

RecyclerView實現條目,左滑、右滑移除效果

對於android開發者來說RecyclerView應該已經很熟悉了,專案中基本都是使用RecyclerView來實現列表效果,這裡要實現的是RecyclerView的條目拖拽、左滑、右滑移除效果,這些效果都是在RecyclerView列表基礎上來實現的,所以還是先簡單的實現RecyclerVi

js實現簡單案例

簡單拖拽事件主要是監聽三個事件:onmousedown, onmousemove, onmouseup 三個事件,思路也很簡單,但是寫的時候還是遇到了一些小問題,先放程式碼: <!DOCTYPE html> <html lang="en"> <head>

vue元件-矩形自由

    最近公司有個需求,需要實現元件拖拽,實現方式:主要通過vue元件實現,通過在網上查詢資料,發現沒有真正符合需求的例子,但是有一些功能可以參考,無奈之下打算自己封裝一個,一方面也想證明一下自己的能力,此篇博文只是記錄一下,方便以後遇到此類問題,有個參考。   經過一段

bootstrap-table實現 的簡單操作

引用 jquery.tablednd.js bootstrap-table-reorder-rows.js 拖拽前原始表 拖拽使用後 程式碼如下,寫在cshtml檔案裡,<table>標籤也僅需加上 data-use-row-attr-func

vue esview 控制元件問題(二)Vue.directiove自定義命令

控制元件拖拽問題(二) initDropEvents是繫結在bind中的(droppable.js) 而這個droppable是在install_derictive.js中定義的定義命令, Vue.directive(‘droppable’,droppable)

使用angular-ui-sortable實現排序列表

                     專案需求,新增列表可拖拽排序功能,谷歌了一下,找到一個Angular的外掛:angular-ui-sortable,專案地址:https://github.com/angular-ui/ui-sortable需要在之前引入jquery,和jquery-ui,否則無法使

Recyclerview實現網格排序

門禁列表排序 需求效果是:前兩行是常用門禁,黃色顯示,之後是普通門,白色顯示。按住一個門時,除了被按住的門,其他門抖動,被按住門加陰影。常用門和普通門交換位置時,開啟漸變動畫。 演示:

JavaScript 在vue頁面下實現滑鼠div改變其大小,適用於鷹眼地圖,街景地圖等。

首先看效果,如圖,滑鼠懸浮在地圖的右上角小框中時,提示“拖動調整大小”,可以給小框加個好看的圖示。點選可以進行拖拽。 基於上一篇部落格:https://blog.csdn.net/acoolgiser/article/details/84866426  實現。 程式碼:

Android drawPath實現QQ泡泡

這兩天學習了使用Path繪製貝塞爾曲線相關,然後自己動手做了一個類似QQ未讀訊息可拖拽的小氣泡,效果圖如下: 接下來一步一步的實現整個過程。 基本原理 其實就是使用Path繪製三點的二次方貝塞爾曲線來完成那個妖嬈的曲線的。然後根據觸控點不斷繪製對應

【前端】js+php實現圖片上傳

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>拖拽圖片上傳</title> </head> <body>