zoukankan      html  css  js  c++  java
  • js实现拖拽

    使用.vue

    <template>
        <div>6666666</div>
    </template>
    <script>
    import { Sdk } from './sdk'
    export default {
        mounted() {
            const sdks = new Sdk({ right: '0', bottom: '20px' })
            sdks.renderDom()
        }
    }
    </script>
    

    sdk.js

    export class Sdk {
        constructor(options) {
            this.top = options.top
            this.right = options.right
            this.bottom = options.bottom
            this.left = options.left
        }
        renderDom() {
            const self = this
            const sdkDom = function(content) {
                ;(function(content) {
                    const div = document.createElement('div')
                    div.innerHTML = content
                    div.id = 'sdkDom'
                    div.style.color = 'red'
                    div.style.width = '200px'
                    div.style.height = '200px'
                    div.style.background = 'red'
                    div.style.position = 'fixed'
                    div.style.cursor = 'pointer'
                    // div.addEventListener('click', self.bntClick)
                    const paras = document.getElementById('sdkDom')
                    if (paras != null) {
                        paras.parentNode.removeChild(paras)
                        document.getElementsByTagName('body')[0].appendChild(div)
                    } else {
                        document.getElementsByTagName('body')[0].appendChild(div)
                    }
                    self.bindDrag(div)
                    self.setPosition(div)
                })(content)
            }
            sdkDom('')
        }
        bntClick() {
            alert('惊喜与意外!')
        }
        bindDrag(dragObj) {
            const self = this
            dragObj.style.left = '0px'
            dragObj.style.top = '0px'
    
            var mouseX, mouseY, objX, objY
            var dragging = false
            var diffX, diffY
            var timeId
            var i
    
            dragObj.onmousedown = function(event) {
                i = 0
                event = event || window.event
                dragging = true
                mouseX = event.clientX // 初始位置时鼠标的坐标
                mouseY = event.clientY
                objX = dragObj.offsetLeft // 元素的初始位置
                objY = dragObj.offsetTop
                diffX = mouseX - objX // 相当于鼠标距物体左边的距离
                diffY = mouseY - objY
            }
            document.onmousemove = function(event) {
                event = event || window.event
                if (dragging) {
                    i += 0.1
                    // 元素左边距等于鼠标移动的宽度加上元素本身的位置
                    dragObj.style.left = event.clientX - mouseX + objX + 'px'
                    dragObj.style.top = event.clientY - mouseY + objY + 'px'
    
                    // 设置边界
                    if (event.clientX - diffX < 0) {
                        // 鼠标到浏览器左边距小于鼠标到obj的左边距
                        dragObj.style.left = 0 + 'px'
                    } else if (event.clientX - diffX > window.innerWidth - dragObj.offsetWidth) {
                        // window.innerWidth浏览器显示区域的宽度,dragObj.offsetWidth物体宽度
                        dragObj.style.left = window.innerWidth - dragObj.offsetWidth + 'px'
                    }
                    if (event.clientY - diffY < 0) {
                        dragObj.style.top = 0 + 'px'
                    } else if (event.clientY - diffY > window.innerHeight - dragObj.offsetHeight) {
                        dragObj.style.top = window.innerHeight - dragObj.offsetHeight + 'px'
                    }
                }
            }
            document.onmouseup = function() {
                clearInterval(timeId)
                if (i <= 0.5) {
                    console.log('是点击')
                    self.bntClick()
                } else {
                    console.log('是拖拽')
                }
                dragging = false
            }
        }
        setPosition(dragObj) {
            dragObj.style.left = this.left || null
            dragObj.style.top = this.top || null
            dragObj.style.bottom = this.bottom || null
            dragObj.style.right = this.right || null
        }
    }
    
    
  • 相关阅读:
    Query on The Trees(hdu 4010)
    背单词(bzoj 4567)
    P2819 图的m着色问题
    P1605 迷宫
    P1230 智力大冲浪
    P1082 同余方程
    P3372 【模板】线段树 1
    P2626 斐波那契数列(升级版)
    长生诀
    写给我第一个喜欢的男孩的歌
  • 原文地址:https://www.cnblogs.com/yzyh/p/12695247.html
Copyright © 2011-2022 走看看