Не могу сделать так что бы drag and drop срабатовало менялся размер по отдельности все работает а вместе только drag and drop срабатывает
вот где меняется размер http://jsfiddle.net/y9Rzu/8/,
а вот все вместе, но срабатывает только drag and drop http://jsfiddle.net/y9Rzu/9/
var delta_w = 0; // Изменение по ширине
var delta_h = 0; // Изменение по высоте
/* После загрузки страницы */
/* Определяем браузер */
block_r = document.getElementById("square-rect"); // Получаем блок для изменения размеров
document.onmouseup = clearXY; // Ставим обработку на отпускание кнопки мыши
block_r.onmousedown = saveWH; // Ставим обработку на нажатие кнопки мыши
/* Функция для получения текущих координат курсора мыши */
function getXY(obj_event) {
if (obj_event) {
x = obj_event.pageX;
y = obj_event.pageY;
}
else {
x = window.event.clientX;
y = window.event.clientY;
if (ie) {
y -= 2;
x -= 2;
}
}
return new Array(x, y);
}
function saveWH(obj_event) {
var point = getXY(obj_event);
w_block = ball.clientWidth; // Текущая ширина блока
h_block = ball.clientHeight; // Текущая высота блока
delta_w = w_block - point[0]; // Измеряем текущую разницу между шириной и x-координатой мыши
delta_h = h_block - point[1]; // Измеряем текущую разницу между высотой и y-координатой мыши
/* Ставим обработку движения мыши для разных браузеров */
document.onmousemove = resizeBlock;
document.addEventListener("onmousemove", resizeBlock, false);
return false; // Отключаем стандартную обработку нажатия мыши
}
/* Функция для измерения ширины окна */
function clientWidth() {
return image.width;
}
/* Функция для измерения высоты окна */
function clientHeight() {
return image.height;
}
/* При отпускании кнопки мыши отключаем обработку движения курсора мыши */
function clearXY() {
document.onmousemove = null;
}
function resizeBlock(obj_event) {
var point = getXY(obj_event);
new_w = delta_w + point[0]; // Изменяем новое приращение по ширине
new_h = delta_h + point[1]; // Изменяем новое приращение по высоте
ball.style.width = new_w + "px"; // Устанавливаем новую ширину блока
ball.style.height = new_h + "px"; // Устанавливаем новую высоту блока
/* Если блок выходит за пределы экрана, то устанавливаем максимальные значения для ширины и высоты */
if (ball.offsetLeft + ball.clientWidth > clientWidth())
ball.style.width = (clientWidth() - ball.offsetLeft) + "px";
if (ball.offsetTop + ball.clientHeight > clientHeight())
ball.style.height = (clientHeight() - ball.offsetTop) + "px";
}
Element.prototype.makeDraggable=function(){
var o=this
o.onmousedown=function(e){
var offsetX=e.pageX-parseInt(o.style.left)
var offsetY=e.pageY-parseInt(o.style.top)
document.onmousemove=function(e) {
o.style.left=Math.max(Math.min(e.pageX-offsetX,o.parentNode.clientWidth-o.clientWidth),0)+'px'
o.style.top=Math.max(Math.min(e.pageY-offsetY,o.parentNode.clientHeight-o.clientHeight),0)+'px'
var Xtop=parseInt(o.style.top);
var Xleft=parseInt(o.style.left);
}
document.onmouseup = function(e) {
document.onmousemove=o.onmouseup=null
}
}
o.ondragstart = function(){return 0}
}
ball.makeDraggable()
#parent{
position:absolute;
top:0;
left:13px;
width:300px;
height:300px;
z-index: 100;
border:1px solid;
}
#ball{
width:100px;
height:100px;
position:absolute;
border:1px solid;
}
#square-rect {
background-color: red;
width: 15px;
height: 15px;
position: absolute;
bottom: 0;
right: 0;
}
<div id="parent">
<div id="ball" style="left:10px;top:10px;" class="rect-war">
<span id="square-rect"></span>
</div>
</div>
Проблема во всплытии события mousedown
. Так как элемент с id square-rect
расположен внутри элемента с id ball
событие mousedown
для него будет всплывать и на самом деле будут вызваны оба обработчика и для square-rect
и для ball
, причем в обработчике для ball
переопределяется обработчик mousemove
для документа. Поэтому видно только движение элемента, а не изменение размера.
Для решения достаточно остановить всплытие в обработчике mousedown элемента square-rect
с помощью функции .stopPropagation()
var delta_w = 0; // Изменение по ширине
var delta_h = 0; // Изменение по высоте
/* После загрузки страницы */
/* Определяем браузер */
block_r = document.getElementById("square-rect"); // Получаем блок для изменения размеров
document.onmouseup = clearXY; // Ставим обработку на отпускание кнопки мыши
block_r.onmousedown = saveWH; // Ставим обработку на нажатие кнопки мыши
/* Функция для получения текущих координат курсора мыши */
function getXY(obj_event) {
if (obj_event) {
x = obj_event.pageX;
y = obj_event.pageY;
} else {
x = window.event.clientX;
y = window.event.clientY;
if (ie) {
y -= 2;
x -= 2;
}
}
return new Array(x, y);
}
function saveWH(obj_event) {
obj_event.stopPropagation();
var point = getXY(obj_event);
w_block = ball.clientWidth; // Текущая ширина блока
h_block = ball.clientHeight; // Текущая высота блока
delta_w = w_block - point[0]; // Измеряем текущую разницу между шириной и x-координатой мыши
delta_h = h_block - point[1]; // Измеряем текущую разницу между высотой и y-координатой мыши
/* Ставим обработку движения мыши для разных браузеров */
document.onmousemove = resizeBlock;
document.addEventListener("onmousemove", resizeBlock, false);
return false; // Отключаем стандартную обработку нажатия мыши
}
/* Функция для измерения ширины окна */
function clientWidth() {
return image.width;
}
/* Функция для измерения высоты окна */
function clientHeight() {
return image.height;
}
/* При отпускании кнопки мыши отключаем обработку движения курсора мыши */
function clearXY() {
document.onmousemove = null;
}
function resizeBlock(obj_event) {
var point = getXY(obj_event);
new_w = delta_w + point[0]; // Изменяем новое приращение по ширине
new_h = delta_h + point[1]; // Изменяем новое приращение по высоте
ball.style.width = new_w + "px"; // Устанавливаем новую ширину блока
ball.style.height = new_h + "px"; // Устанавливаем новую высоту блока
/* Если блок выходит за пределы экрана, то устанавливаем максимальные значения для ширины и высоты */
if (ball.offsetLeft + ball.clientWidth > clientWidth())
ball.style.width = (clientWidth() - ball.offsetLeft) + "px";
if (ball.offsetTop + ball.clientHeight > clientHeight())
ball.style.height = (clientHeight() - ball.offsetTop) + "px";
}
Element.prototype.makeDraggable = function() {
var o = this
o.onmousedown = function(e) {
var offsetX = e.pageX - parseInt(o.style.left)
var offsetY = e.pageY - parseInt(o.style.top)
document.onmousemove = function(e) {
o.style.left = Math.max(Math.min(e.pageX - offsetX, o.parentNode.clientWidth - o.clientWidth), 0) + 'px'
o.style.top = Math.max(Math.min(e.pageY - offsetY, o.parentNode.clientHeight - o.clientHeight), 0) + 'px'
var Xtop = parseInt(o.style.top);
var Xleft = parseInt(o.style.left);
}
document.onmouseup = function(e) {
document.onmousemove = o.onmouseup = null
}
}
o.ondragstart = function() {
return 0
}
}
ball.makeDraggable()
#parent {
position: absolute;
top: 0;
left: 13px;
width: 300px;
height: 300px;
z-index: 100;
border: 1px solid;
}
#ball {
width: 100px;
height: 100px;
position: absolute;
border: 1px solid;
}
#square-rect {
background-color: red;
width: 15px;
height: 15px;
position: absolute;
bottom: 0;
right: 0;
}
<div id="parent">
<div id="ball" style="left:10px;top:10px;" class="rect-war">
<span id="square-rect"></span>
</div>
</div>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте) созрел важный вопрос,на сайте есть блок с видео
Есть поиск на сайте, который выдает инфу каждый раз, когда в нем появляется новый символТо есть к примеру пишем heroes, h - выдает результаты, которые...
I need to make simple calculatorUser should type in some numbers on web page in teg , than I need to use this info, that he wrote in web page, in js, forexample to write the info to a varible a than make some math opereting with it