Skip to content

Instantly share code, notes, and snippets.

@zaru
Created July 18, 2018 17:24
Show Gist options
  • Save zaru/cd1974daa73231f1073505962713711d to your computer and use it in GitHub Desktop.
Save zaru/cd1974daa73231f1073505962713711d to your computer and use it in GitHub Desktop.
選択範囲のボックスを作成するJS雑なサンプルコード
(() => {
let dragStart = false
let div
let startX, startY = 0
const evtMouseDown = (e) => {
dragStart = true
document.body.style.userSelect = 'none'
div = document.createElement('div')
div.style.backgroundColor = '#ddd'
div.style.border = '1px solid #aaa'
div.style.opacity = 0.5
div.style.position = 'absolute'
div.style.zIndex = 9999
startX = e.pageX
startY = e.pageY
document.body.appendChild(div)
console.log('mouse down', e)
}
const evtMouseMove = (e) => {
if (dragStart) {
if (e.pageX > startX && e.pageY > startY) {
// 右下
div.style.left = `${startX}px`
div.style.top = `${startY}px`
div.style.width = `${e.pageX - startX}px`
div.style.height = `${e.pageY - startY}px`
} else if (e.pageX > startX && e.pageY < startY) {
// 右上
div.style.left = `${startX}px`
div.style.top = `${startY - (startY - e.pageY)}px`
div.style.width = `${e.pageX - startX}px`
div.style.height = `${startY - e.pageY}px`
} else if (e.pageX < startX && e.pageY > startY) {
// 左下
div.style.left = `${startX - (startX - e.pageX)}px`
div.style.top = `${startY}px`
div.style.width = `${startX - e.pageX}px`
div.style.height = `${e.pageY - startY}px`
} else {
// 左上
div.style.left = `${startX - (startX - e.pageX)}px`
div.style.top = `${startY - (startY - e.pageY)}px`
div.style.width = `${startX - e.pageX}px`
div.style.height = `${startY - e.pageY}px`
}
console.log('mouse move', e)
}
}
const evtMouseUp = (e) => {
dragStart = false
document.body.style.userSelect = 'auto'
console.log('mouse up', e)
}
const addEvent = () => {
document.addEventListener('mousedown', evtMouseDown)
document.addEventListener('mousemove', evtMouseMove)
document.addEventListener('mouseup', evtMouseUp)
}
addEvent()
})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment