您当前的位置:首页 > 网站建设 > javascript
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery | 小程序 |

typescript+react实现移动端和PC端简单拖拽效果

51自学网 2022-02-21 13:41:17
  javascript

本文实例为大家分享了typescript+react实现移动端和PC端简单拖拽效果的具体代码,供大家参考,具体内容如下

一、移动端

1.tsx代码

import { Component } from "react";import './Tab.less'interface Props { }interface user {    id: string,    text: string}interface content {    id: string,    text: string}interface State {    ButtonIndex: number,    ButtonArray: user[],    ContentArray: content[]}class Tab extends Component<Props, State>{    constructor(props: Props) {        super(props)        this.state = {            ButtonIndex: 0,            ButtonArray: [                {                    id: '01',                    text: '按钮一'                },                {                    id: '02',                    text: '按钮二'                },                {                    id: '03',                    text: '按钮三'                }            ],            ContentArray: [                {                    id: 'c1',                    text: '内容一'                },                {                    id: 'c2',                    text: '内容二'                },                {                    id: 'c3',                    text: '内容三'                }            ],        }    }    FnTab(index: number):void {        this.setState({            ButtonIndex: index        })    }    render() {        return (            <div className='tab'>                {                    this.state.ButtonArray.map((item, index) => <button key={item.id} onClick={this.FnTab.bind(this, index)} className={this.state.ButtonIndex === index ? 'tab-button ac' : 'tab-button'}>{item.text}</button>)                }                {                    this.state.ContentArray.map((item, index) => <div key={item.id} style={{display:this.state.ButtonIndex===index?'block':'none'}} className='tab-content'>{item.text}</div>)                }             </div>        )    }}export default Tab

2.css代码

.drag {    position: absolute;    width: 100px;    height: 100px;    background-color: red;}

二、PC端

1.tsx代码

import { Component, createRef } from 'react'import './index.less'interface Props {  }interface State {  }class TextDrag extends Component {  disX: number = 0  disY: number = 0  x: number = 0  y: number = 0  dragElement = createRef<HTMLDivElement>()  constructor(props: Props) {    super(props)    this.state = {      }  }  FnDown(ev: React.MouseEvent) {    if (this.dragElement.current) {      this.disX = ev.clientX - this.dragElement.current?.getBoundingClientRect().left      this.disX = ev.clientY - this.dragElement.current?.getBoundingClientRect().top    }    document.onmousemove = this.FnMove.bind(this)    document.onmouseup = this.FnUp  }  FnMove(ev: MouseEvent) {    this.x = ev.clientX - this.disX    this.y = ev.clientY - this.disY    if (this.dragElement.current) {      this.dragElement.current.style.left = this.x + 'px'      this.dragElement.current.style.top = this.y + 'px'    }  }  FnUp() {    document.onmousemove = null    document.onmouseup = null  }  render() {    return (      <div className="TextDrag" ref={this.dragElement} onMouseDown={this.FnDown.bind(this)}>  </div>      )  }}export default TextDrag

2.css代码

.TextDrag{    position: absolute;    width: 100px;    height: 100px;    background-color: red;}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持51zixue.net。


下载地址:
vuex项目中登录状态管理的实践过程
js实现省市区三级联动非select下拉框版
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。