1 Star 0 Fork 0

ByeWord/升入JavaScript学习日志

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
dragV2.js 4.22 KB
一键复制 编辑 原始数据 按行查看 历史
(function (global) {
var transform = getTransform()
function Drag(selector) {
this.elem = typeof selector === 'object' ? selector : document.querySelector(selector)
this.mouse_x = 0
this.mouse_y = 0
this.elem_x = 0
this.elem_y = 0
this.init()
}
Drag.prototype = {
version: '2.0',
init: function () {
this.setDrag()
},
getElemPosition() {
var position = {x: 0, y: 0}
var elem = this.elem
if (transform) {
this.isTransform(elem, position)
} else {
this.isPosition(elem, position)
}
return position
},
isTransform: function (elem, position) {
var styleValue = getStyleValue(elem, transform)
if (styleValue !== 'none') {
let styleValueArr = styleValue.match(/-?\d+/g)
position.x = parseInt(styleValueArr[4].trim())
position.y = parseInt(styleValueArr[5].trim())
}
},
isPosition: function (elem, position) {
if (getStyleValue(elem, 'position') === 'static') {
this.elem.style['position'] = 'relative'
} else {
position.x = parseInt(getStyleValue(elem, 'left') ? getStyleValue(elem, 'left') : 0)
position.y = parseInt(getStyleValue(elem, 'right') ? getStyleValue(elem, 'right') : 0)
}
},
/**
* @description 设置位置 例如 {x:10,y:10}
* @param position {Object}
*/
setElemPosition(position) {
if (transform) {
this.elem.style[transform] = `translate(${position.x}px,${position.y}px)`
} else {
this.elem.style['left'] = `${position.x}px`
this.elem.style['right'] = `${position.y}px`
}
},
/**
* @description 给当前元素添加鼠标拖动处理的事件
*/
setDrag: function () {
var self = this
this.elem.addEventListener('mousedown', start, false)
/**
* @description 记录按下鼠标时的位置,同时绑定mousemove和mouseup事件
* @param event
*/
function start(event) {
self.mouse_x = event.pageX
self.mouse_y = event.pageY
let position = self.getElemPosition();
self.elem_y = position.y
self.elem_x = position.x
document.addEventListener("mousemove", move, false)
document.addEventListener("mouseup", end, false)
}
function move(event) {
var target_mouse_x = event.pageX,
target_mouse_y = event.pageY,
distance_x = target_mouse_x - self.mouse_x,
distance_y = target_mouse_y - self.mouse_y,
position = self.getElemPosition();
position.x = self.elem_x + distance_x;
position.y = self.elem_y + distance_y;
self.setElemPosition(position)
}
function end(event) {
document.removeEventListener("mousemove", move)
document.removeEventListener("mouseup", end)
}
}
}
function getTransform() {
var transform = '',
transforms = ["transform", "webkitTransform", "MozTransform", "msTransform", "OTransform"],
len = transforms.length,
index = 0,
bodyStyle = document.body.style;
for (; index < len; index++) {
if (transforms[index] in bodyStyle) {
return transforms[index]
} else {
return transform
}
}
}
function getStyleValue(elem, property) {
if (document.defaultView.getComputedStyle) {
return document.defaultView.getComputedStyle(elem, false)[property]
} else {
return elem.currentStyle[property]
}
}
global.Drag = Drag
})(window)
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/ByeWord/JavaScriptLearning.git
git@gitee.com:ByeWord/JavaScriptLearning.git
ByeWord
JavaScriptLearning
升入JavaScript学习日志
master

搜索帮助