init
This commit is contained in:
parent
06f61d8ce8
commit
f301cb744d
2271 changed files with 103162 additions and 0 deletions
1
02-ui/05-widgets/02-widgets-structure/02-slider-widget/solution/.plnkr
Executable file
1
02-ui/05-widgets/02-widgets-structure/02-slider-widget/solution/.plnkr
Executable file
|
@ -0,0 +1 @@
|
|||
{"name":"slider-simple","plunk":"Lby0d7r3u4irsI8Ml24K"}
|
79
02-ui/05-widgets/02-widgets-structure/02-slider-widget/solution/index.html
Executable file
79
02-ui/05-widgets/02-widgets-structure/02-slider-widget/solution/index.html
Executable file
|
@ -0,0 +1,79 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<script src="lib.js"></script>
|
||||
<style>
|
||||
.slider {
|
||||
border-radius: 5px;
|
||||
background: #E0E0E0;
|
||||
background: -moz-linear-gradient(left top , #E0E0E0, #EEEEEE) repeat scroll 0 0 transparent;
|
||||
background: -webkit-gradient(linear, left top, right bottom, from(#E0E0E0), to(#EEEEEE));
|
||||
background: linear-gradient(left top, #E0E0E0, #EEEEEE);
|
||||
width: 310px;
|
||||
height: 15px;
|
||||
margin: 5px;
|
||||
}
|
||||
.thumb {
|
||||
width: 10px;
|
||||
height: 25px;
|
||||
border-radius: 3px;
|
||||
position: relative;
|
||||
left: 10px;
|
||||
top: -5px;
|
||||
background: blue;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="slider" class="slider">
|
||||
<div class="thumb"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
var sliderElem = document.getElementById('slider');
|
||||
var thumbElem = sliderElem.children[0];
|
||||
|
||||
thumbElem.ondragstart = function() { return false; };
|
||||
thumbElem.onmousedown = function(e) {
|
||||
e = fixEvent(e);
|
||||
var thumbCoords = getCoords(thumbElem);
|
||||
var shiftX = e.pageX - thumbCoords.left;
|
||||
// shiftY здесь не нужен, слайдер двигается только по горизонтали
|
||||
|
||||
var sliderCoords = getCoords(sliderElem);
|
||||
|
||||
document.onmousemove = function(e) {
|
||||
e = fixEvent(e);
|
||||
|
||||
// вычесть координату родителя, т.к. position: relative
|
||||
var newLeft = e.pageX - shiftX - sliderCoords.left;
|
||||
|
||||
// курсор ушёл вне слайдера
|
||||
if (newLeft < 0) {
|
||||
newLeft = 0;
|
||||
}
|
||||
var rightEdge = sliderElem.offsetWidth - thumbElem.offsetWidth;
|
||||
if (newLeft > rightEdge) {
|
||||
newLeft = rightEdge;
|
||||
}
|
||||
|
||||
thumbElem.style.left = newLeft + 'px';
|
||||
}
|
||||
|
||||
document.onmouseup = function() {
|
||||
document.onmousemove = document.onmouseup = null;
|
||||
};
|
||||
|
||||
return false; // disable selection start (cursor change)
|
||||
};
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
44
02-ui/05-widgets/02-widgets-structure/02-slider-widget/solution/lib.js
Executable file
44
02-ui/05-widgets/02-widgets-structure/02-slider-widget/solution/lib.js
Executable file
|
@ -0,0 +1,44 @@
|
|||
|
||||
function fixEvent(e) {
|
||||
e = e || window.event;
|
||||
|
||||
if (!e.target) e.target = e.srcElement;
|
||||
|
||||
if (e.pageX == null && e.clientX != null ) { // если нет pageX..
|
||||
var html = document.documentElement;
|
||||
var body = document.body;
|
||||
|
||||
e.pageX = e.clientX + (html.scrollLeft || body && body.scrollLeft || 0);
|
||||
e.pageX -= html.clientLeft || 0;
|
||||
|
||||
e.pageY = e.clientY + (html.scrollTop || body && body.scrollTop || 0);
|
||||
e.pageY -= html.clientTop || 0;
|
||||
}
|
||||
|
||||
if (!e.which && e.button) {
|
||||
e.which = e.button & 1 ? 1 : ( e.button & 2 ? 3 : ( e.button & 4 ? 2 : 0 ) )
|
||||
}
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
|
||||
function getCoords(elem) {
|
||||
var box = elem.getBoundingClientRect();
|
||||
|
||||
var body = document.body;
|
||||
var docElem = document.documentElement;
|
||||
|
||||
var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
|
||||
var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;
|
||||
|
||||
var clientTop = docElem.clientTop || body.clientTop || 0;
|
||||
var clientLeft = docElem.clientLeft || body.clientLeft || 0;
|
||||
|
||||
var top = box.top + scrollTop - clientTop;
|
||||
var left = box.left + scrollLeft - clientLeft;
|
||||
|
||||
return { top: Math.round(top), left: Math.round(left) };
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"name":"slider-component","plunk":"yOsWKXyShloaVwdeA5Of"}
|
|
@ -0,0 +1,107 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<script src="http://code.jquery.com/jquery.min.js"></script>
|
||||
|
||||
<style>
|
||||
.slider {
|
||||
margin: 5px;
|
||||
width: 310px;
|
||||
height: 15px;
|
||||
border-radius: 5px;
|
||||
background: #E0E0E0;
|
||||
background: -moz-linear-gradient(left top, #E0E0E0, #EEEEEE) repeat scroll 0 0 transparent;
|
||||
background: -webkit-gradient(linear, left top, right bottom, from(#E0E0E0), to(#EEEEEE));
|
||||
background: linear-gradient(left top, #E0E0E0, #EEEEEE);
|
||||
}
|
||||
.thumb {
|
||||
position: relative;
|
||||
top: -5px;
|
||||
left: 10px;
|
||||
width: 10px;
|
||||
height: 25px;
|
||||
border-radius: 3px;
|
||||
background: blue;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="slider" class="slider">
|
||||
<div class="thumb"></div>
|
||||
</div>
|
||||
<script>
|
||||
var slider = new Slider({
|
||||
elem: $('#slider')
|
||||
});
|
||||
|
||||
function Slider(options) {
|
||||
var elem = options.elem;
|
||||
var thumbElem = elem.find('.thumb');
|
||||
|
||||
var sliderCoords, thumbCoords, shiftX, shiftY;
|
||||
|
||||
elem.on('dragstart', false)
|
||||
.on('mousedown', '.thumb', onThumbMouseDown);
|
||||
|
||||
// ---------------
|
||||
|
||||
function onDocumentMouseMove(e) {
|
||||
moveTo(e.pageX);
|
||||
}
|
||||
|
||||
function onThumbMouseDown(e) {
|
||||
startDrag(e.pageX, e.pageY);
|
||||
return false; // disable selection start (cursor change)
|
||||
}
|
||||
|
||||
function onDocumentMouseUp() {
|
||||
endDrag();
|
||||
}
|
||||
|
||||
// -------------------
|
||||
|
||||
function moveTo(pageX) {
|
||||
// вычесть координату родителя, т.к. position: relative
|
||||
var newLeft = pageX - shiftX - sliderCoords.left;
|
||||
|
||||
// курсор ушёл вне слайдера
|
||||
if(newLeft < 0) {
|
||||
newLeft = 0;
|
||||
}
|
||||
var rightEdge = elem.width() - thumbElem.width();
|
||||
if(newLeft > rightEdge) {
|
||||
newLeft = rightEdge;
|
||||
}
|
||||
|
||||
thumbElem.css('left', newLeft);
|
||||
}
|
||||
|
||||
|
||||
function startDrag(startPageX, startPageY) {
|
||||
thumbCoords = thumbElem.offset();
|
||||
shiftX = startPageX - thumbCoords.left;
|
||||
shiftY = startPageY - thumbCoords.top;
|
||||
|
||||
sliderCoords = elem.offset();
|
||||
|
||||
$(document).on({
|
||||
'mousemove.slider': onDocumentMouseMove,
|
||||
'mouseup.slider': onDocumentMouseUp
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function endDrag() {
|
||||
$(document).off('.slider');
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
Loading…
Add table
Add a link
Reference in a new issue