taskui
This commit is contained in:
parent
fe571b36ed
commit
718d9df37b
6 changed files with 21 additions and 211 deletions
|
@ -1,5 +1,3 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
class HoverIntent {
|
class HoverIntent {
|
||||||
|
|
||||||
constructor({
|
constructor({
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<link rel="stylesheet" href="style.css">
|
|
||||||
<script src="hoverIntent.js"></script>
|
|
||||||
<script src="https://en.js.cx/test/libs.js"></script>
|
|
||||||
<script src="test.js"></script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="elem" class="clock">
|
|
||||||
<span class="hours">12</span> :
|
|
||||||
<span class="minutes">30</span> :
|
|
||||||
<span class="seconds">00</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="tooltip" hidden>Tooltip</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
new HoverIntent({
|
|
||||||
elem,
|
|
||||||
over() {
|
|
||||||
tooltip.style.left = elem.getBoundingClientRect().left + 5 + 'px';
|
|
||||||
tooltip.style.top = elem.getBoundingClientRect().bottom + 5 + 'px';
|
|
||||||
tooltip.hidden = false;
|
|
||||||
},
|
|
||||||
out() {
|
|
||||||
tooltip.hidden = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,38 +0,0 @@
|
||||||
.hours {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.minutes {
|
|
||||||
color: green;
|
|
||||||
}
|
|
||||||
|
|
||||||
.seconds {
|
|
||||||
color: blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
.clock {
|
|
||||||
border: 1px dashed black;
|
|
||||||
padding: 5px;
|
|
||||||
display: inline-block;
|
|
||||||
background: yellow;
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#tooltip {
|
|
||||||
position: absolute;
|
|
||||||
padding: 10px 20px;
|
|
||||||
border: 1px solid #b3c9ce;
|
|
||||||
border-radius: 4px;
|
|
||||||
text-align: center;
|
|
||||||
font: italic 14px/1.3 sans-serif;
|
|
||||||
color: #333;
|
|
||||||
background: #fff;
|
|
||||||
z-index: 100000;
|
|
||||||
box-shadow: 3px 3px 3px rgba(0, 0, 0, .3);
|
|
||||||
}
|
|
|
@ -1,98 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
describe("hoverIntent", function() {
|
|
||||||
|
|
||||||
function mouse(eventType, x, y, options) {
|
|
||||||
let eventOptions = Object.assign({
|
|
||||||
bubbles: true,
|
|
||||||
clientX: x,
|
|
||||||
clientY: y,
|
|
||||||
pageX: x,
|
|
||||||
pageY: y,
|
|
||||||
target: elem
|
|
||||||
}, options || {});
|
|
||||||
|
|
||||||
elem.dispatchEvent(new MouseEvent(eventType, eventOptions));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
let isOver;
|
|
||||||
let hoverIntent;
|
|
||||||
|
|
||||||
|
|
||||||
before(function() {
|
|
||||||
this.clock = sinon.useFakeTimers();
|
|
||||||
});
|
|
||||||
|
|
||||||
after(function() {
|
|
||||||
this.clock.restore();
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
beforeEach(function() {
|
|
||||||
isOver = false;
|
|
||||||
|
|
||||||
hoverIntent = new HoverIntent({
|
|
||||||
elem: elem,
|
|
||||||
over: function() {
|
|
||||||
isOver = true;
|
|
||||||
},
|
|
||||||
out: function() {
|
|
||||||
isOver = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(function() {
|
|
||||||
if (hoverIntent) {
|
|
||||||
hoverIntent.destroy();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
it("mouseover -> when the pointer just arrived, no tooltip", function() {
|
|
||||||
mouse('mouseover', 10, 10);
|
|
||||||
assert.isFalse(isOver);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("mouseover -> after a delay, the tooltip shows up", function() {
|
|
||||||
mouse('mouseover', 10, 10);
|
|
||||||
this.clock.tick(100);
|
|
||||||
assert.isTrue(isOver);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("mouseover -> followed by fast mouseout leads doesn't show tooltip", function() {
|
|
||||||
mouse('mouseover', 10, 10);
|
|
||||||
setTimeout(
|
|
||||||
() => mouse('mouseout', 300, 300, { relatedTarget: document.body}),
|
|
||||||
30
|
|
||||||
);
|
|
||||||
this.clock.tick(100);
|
|
||||||
assert.isFalse(isOver);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
it("mouseover -> slow move -> tooltips", function() {
|
|
||||||
mouse('mouseover', 10, 10);
|
|
||||||
for(let i=10; i<200; i+= 10) {
|
|
||||||
setTimeout(
|
|
||||||
() => mouse('mousemove', i/5, 10),
|
|
||||||
i
|
|
||||||
);
|
|
||||||
}
|
|
||||||
this.clock.tick(200);
|
|
||||||
assert.isTrue(isOver);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("mouseover -> fast move -> no tooltip", function() {
|
|
||||||
mouse('mouseover', 10, 10);
|
|
||||||
for(let i=10; i<200; i+= 10) {
|
|
||||||
setTimeout(
|
|
||||||
() => mouse('mousemove', i, 10),
|
|
||||||
i
|
|
||||||
);
|
|
||||||
}
|
|
||||||
this.clock.tick(200);
|
|
||||||
assert.isFalse(isOver);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
|
@ -1,5 +1,3 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
// Here's a brief sketch of the class
|
// Here's a brief sketch of the class
|
||||||
// with things that you'll need anyway
|
// with things that you'll need anyway
|
||||||
class HoverIntent {
|
class HoverIntent {
|
||||||
|
|
|
@ -1,15 +1,5 @@
|
||||||
<!doctype html>
|
|
||||||
<html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<link rel="stylesheet" href="style.css">
|
<link rel="stylesheet" href="style.css">
|
||||||
<script src="hoverIntent.js"></script>
|
<script src="hoverIntent.js"></script>
|
||||||
<script src="https://en.js.cx/test/libs.js"></script>
|
|
||||||
<script src="test.js"></script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="elem" class="clock">
|
<div id="elem" class="clock">
|
||||||
<span class="hours">12</span> :
|
<span class="hours">12</span> :
|
||||||
|
@ -32,6 +22,3 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue