<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>HighLight</title>
<style>
*{
margin: 0;
padding: 0;
list-style: none;
box-sizing: border-box;
}
html,body{
height: 100%;
position: relative;
}
#mainBox{
position: absolute;
width: 30px;
height: 30px;
left: 50%;
top: 50%;
background: lightblue;
border-radius: 50%;
opacity: .5;
}
.smallBox{
position: absolute;
border-radius: 50%;
border: 1px solid #ccc;
}
</style>
</head>
<body>
<svg width='100%' height='100%' version="1.1"
xmlns="http://www.w3.org/2000/svg">
</svg>
<div id="mainBox">
</div>
<script>
function highLight(){
this.smallConfig = {
w:15,
h:15
};
this.smallBoxCounts = 10;
};
highLight.prototype.createSmallBox = function(){
var window_width = window.innerWidth,
window_height = window.innerHeight,
left = 0,
top = 0;
for(var i = 0; i < this.smallBoxCounts; i++){
var smallBox = document.createElement('div');
smallBox.setAttribute('class','smallBox');
left = Math.random()*window_width-10;
top = Math.random()*window_height-10;
smallBox.style.top = top + 'px';
smallBox.style.left = left + 'px';
smallBox.style.width = this.smallConfig.w + 'px';
smallBox.style.height = this.smallConfig.h + 'px';
smallBox.style.background = `rgb(${ parseInt(Math.random()*255)},${ parseInt(Math.random()*255)},${ parseInt(Math.random()*255)})`;
smallBox.style.opacity = .2;
smallBox.setAttribute('data-index',i);
document.body.appendChild(smallBox);
this.createLine(left,top,i);
}
};
highLight.prototype.createLine = function(left,top,index){
var mainBox = document.querySelector('#mainBox'),
main_left = mainBox.offsetLeft,
main_top = mainBox.offsetTop,
// 加偏移值
line = `<line x1=${main_left+15} x2=${parseInt(left+this.smallConfig.w/2)} y1=${main_top+15} y2=${parseInt(top+this.smallConfig.h/2)} stroke='rgba(0,0,0,.2)' id=line${index}>`;
svg = document.querySelector('svg');
svg.innerHTML += line;
};
highLight.prototype.hoverHightLight = function(){
var line = document.querySelectorAll('.smallBox');
var mainBox = document.querySelector('#mainBox');
for(var i = 0; i < line.length; i++){
line[i].onmouseenter = function(){
var index = this.getAttribute('data-index'),
target = document.querySelector(`#line${index}`);
this.style.opacity = 1;
target.style.stroke = 'rgba(0,0,0,1)';
mainBox.style.opacity = 1;
}
}
for(var i = 0; i < line.length; i++){
line[i].onmouseleave = function(){
var index = this.getAttribute('data-index'),
target = document.querySelector(`#line${index}`);
this.style.opacity = .2;
target.style.stroke = 'rgba(0,0,0,.2)';
mainBox.style.opacity = .5;
}
}
};
highLight.prototype.draggble = function(){
var flag,
that = this;
document.onmousedown = function(e){
flag = true;
_target = e.target;
var diffX = e.clientX - e.target.offsetLeft;
var diffY = e.clientY - e.target.offsetTop;
document.onmousemove = function(e){
var left = e.clientX-diffX;
var top = e.clientY-diffY;
if(flag){
_target.style.left = left + 'px';
_target.style.top = top + 'px';
var index = _target.getAttribute('data-index');
var tar = document.querySelector(`#line${index}`);
var line = document.querySelectorAll('line');
if(e.target.getAttribute('id') == 'mainBox'){
for(var i = 0; i < line.length; i++){
line[i].setAttribute('x1',left+15);
line[i].setAttribute('y1',top+15);
}
}else{
tar.setAttribute('x2',left+that.smallConfig.w/2);
tar.setAttribute('y2',top+that.smallConfig.w/2);
}
}
}
document.onmouseup = function(){
flag = false;
}
}
};
var zy = new highLight();
zy.createSmallBox();
zy.hoverHightLight();
zy.draggble();
</script>
</body>
</html>
原生JS 拖拽DEMO
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...