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>