拖拽改变元素位置或大小

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
body{
background:#000;
}
.upshop-view{
width:320px;
height:499px;
background:#fff;
background-size:contain;
position:relative;
z-index:9998;
margin:0 auto;

}
.touchmove{
position:absolute;
z-index:9990;
}
.touchmove span{
display:block;
width:10px;
height:10px;
background:#8F8F8F;
position:absolute;
display:none;
z-index:9999;
}
.l{
left:-5px;
top:50%;
margin-top:-5px;
}
.r{
right:-5px;
top:50%;
margin-top:-5px;
}
.t{
top:-5px;
left:50%;
margin-left:-5px;
}
.b{
bottom:-5px;
left:50%;
margin-left:-5px;
}
.border{
border:1px dashed #ccc;
}
.touchmove1{
width:100px;
height:100px;
top:135px;
left:110px;
}
.touchmove1 img{
display:block;
width:100%;
height:100%;
background:pink;
}
</style>
<script src="jquery-1.7.2.js"></script>
<script>
$(function(){
//拖拽图标
var oUpshopView = document.getElementById(‘upshop_view‘);
var oTouchmove1 = oUpshopView.getElementsByTagName(‘div‘)[0];
var oImg1 = $(‘#touchmove1‘).children(‘img‘)[0];
var aSpan1 = $(‘#touchmove1‘).children(‘span‘);

ShowBox($(‘#touchmove1‘));
//拖拽改变图标大小
for (var i = 0; i < aSpan1.length; i++) {
DragSize(aSpan1[i], oTouchmove1, oUpshopView);
}
//拖拽改变图标位置
DragPosition(oImg1,oTouchmove1, oUpshopView);
});
function ShowBox(obj) {
obj.on(‘mouseenter‘, function () {
$(this).children(‘span‘).show();
$(this).addClass(‘border‘);
});
obj.on(‘mouseleave‘, function () {
$(this).children(‘span‘).hide();
$(this).removeClass(‘border‘);
});
}

//拖拽改变图标位置
function getPos(obj) {
var l = 0;
var t = 0;
while (obj) {
l += obj.offsetLeft;
t += obj.offsetTop;
obj = obj.offsetParent;
}
return { left: l, top: t };
}
function DragPosition(obj1,obj2, obj3) {//obj1拖拽的元素,obj2改变的元素,obj3改变元素的父级用于限制拖拽区域;
var W = obj3.offsetWidth;
var H = obj3.offsetHeight;
obj1.onmousedown = function (ev) {
var oEvent = ev || event;
var disX = oEvent.clientX - getPos(obj2).left;
var disY = oEvent.clientY - getPos(obj2).top;
document.onmousemove = function (ev) {
var oEvent = ev || event;
var l = oEvent.clientX - disX - getPos(obj3).left;
var t = oEvent.clientY - disY - getPos(obj3).top;
if (l <= 0) {
l = 0;
} else if (l >= W - obj2.offsetWidth) {
l = W - obj2.offsetWidth;
}
if (t <=0) {
t = 0;
} else if (t >= H - obj2.offsetHeight) {
t = H - obj2.offsetHeight;
}
obj2.style.left = l+‘px‘;
obj2.style.top = t+ ‘px‘;
}
document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;
obj1.releaseCapture && obj1.releaseCapture();
}
obj1.setCapture && obj1.setCapture();
return false;
}
}
//拖拽改变图标大小
function DragSize(obj1, obj2,obj3) {//obj1:拖拽的元素,obj2:改变的元素,obj3改变元素的父级用于限制拖拽区域;
var W = obj3.offsetWidth;
var H = obj3.offsetHeight;
obj1.onmousedown = function (ev) {
var oEvent = ev || event;
var oldW = obj2.offsetWidth;
var oldH = obj2.offsetHeight;
var oldL = obj2.offsetLeft;
var oldT = obj2.offsetTop;
var downX = oEvent.clientX;
var downY = oEvent.clientY;
document.onmousemove = function (ev) {
var oEvent = ev || event;
if (obj1.className.indexOf(‘l‘) != -1) {
var newX = downX - oEvent.clientX;
var newL = oldL - newX;
var newW = oldW + newX;
var newH = oldH + newX;
if (newW >= W) {
newW = W;
}
if (newH >= H - oldT) {
newH = H - oldT;
}
if (newL <= 0) {
newL = 0;
} else if (newL >= W - obj2.offsetWidth - getPos(obj3).left) {
newL = W - obj2.offsetWidth - getPos(obj3).left;
}
obj2.style.left = newL + ‘px‘;
}
if (obj1.className.indexOf(‘t‘) != -1) {
var newY = downY - oEvent.clientY;
var newT = oldT - newY;
var newH = oldH + newY;
var newW = oldW + newY;
if (newW >= W-oldL) {
newW = W - oldL;
}
if (newH >= H) {
newH = H;
}
if (newT <= 0) {
newT = 0;
} else if (newT >= H - obj2.offsetHeight) {
newT = H - obj2.offsetHeight;
}
obj2.style.top = newT + ‘px‘;
}
if (obj1.className.indexOf(‘r‘) != -1) {
var newX = oEvent.clientX - downX;
var newW = oldW + newX;
var newH = oldH + newX;
if (newW >= W-oldL) {
newW = W - oldL;
newH = W - oldL;
}
}
if (obj1.className.indexOf(‘b‘) != -1) {
var newY = oEvent.clientY - downY;
var newH = oldH + newY;
var newW = oldW + newY;
if (newW >= W - oldL) {
newW = W - oldL;
}
if (newH >= H - oldT) {
newH = H - oldT;
}
}
obj2.style.width = newW + ‘px‘;
obj2.style.height = newH + ‘px‘;
}
document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;
obj1.releaseCapture && obj1.releaseCapture();
}
obj1.setCapture && obj1.setCapture();
return false;
}
}
</script>
</head>

<body>
<div class="upshop-view" id="upshop_view">
<div class="touchmove touchmove1" id="touchmove1">
<img src="../../Images/Common/headLogo.jpg"/>
<span class="l"></span>
<span class="r"></span>
<span class="t"></span>
<span class="b"></span>
</div>
<div>
</body>
</html>

时间: 2024-08-05 18:17:22

拖拽改变元素位置或大小的相关文章

拖拽改变元素位置或大小bug修复

<!doctype html><html><head>   <meta charset="utf-8">   <title>无标题文档</title><style>body{   background:#000;}.upshop-view{   width:320px;   height:499px;   background:#fff;   background-size:contain;   pos

javascript动画系列第四篇——拖拽改变元素大小

× 目录 [1]原理简介 [2]范围圈定 [3]大小改变[4]代码优化 前面的话 拖拽可以让元素移动,也可以改变元素大小.本文将详细介绍拖拽改变元素大小的效果实现 原理简介 拖拽让元素移动,是改变定位元素的left和top值实现的.而拖拽改变元素大小,则还需要改变元素的宽高 范围圈定 我们把改变元素大小的范围圈定在距离相应边10px的范围内 左侧边界L = obj.offsetLeft + 10 右侧边界R = obj.offsetLeft + obj.offsetWidth - 10 上侧边界

jquery插件之拖拽改变元素大小

该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽改变元素大小的效果,您可以根据自己的实际需求来设置被拖拽元素的最小宽高和最大宽高.整体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitiona

JQuery拖拽改变元素的尺寸

"元素拖拽改变大小"其实和"元素拖拽"一个原理,只是所动态改变的对象不同而已,主要在于 top.left.width.height 的运用,相对实现起来也非常容易.以下附出源码原型,弄明白了原理再扩展其他实际应用,思路就变得简单.清晰得多了.先来看看效果:塔河县臧清机械 下面是 JavaScript Code view source print? 01 <script type="text/javascript"> 02     /*

Winform拖拽改变无边框窗体大小

大家在进行Winform开发过程中,很容易就可以完成一个窗口的布局工作,但现在的软件界面美化效果一个比一个好,很多软件都是无边框的,于是乎,你是不是也感叹:winform的带边框的窗体如此丑陋,我一定要把边框去掉!OK,去掉边框对Winform来说那绝对一件相当easy的事情,一句this.FormBorderStyle=FormBorderStyle.None就可搞定.       简单倒是简单,边框去掉了,达到了自己的要求,但同时来了很多麻烦,其中一个就是窗口无法拖动改变大小了(这个问题在网

通过Ztree生成页面html元素Dom树,以及拖拽改变元素的位置

zTree 是一款依靠 jQuery 实现的多功能 "树插件",http://www.treejs.cn/v3/main.php#_zTreeInfo,功能强大,不多赘述. 下面我将介绍如何实现使用该插件生成HTML元素Dom树,并对其进行多样操作. 先贴上一个简单的HTML页面(直接拿的ztree的用的,画面简单实用,里面的文字内容不用在意) 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-e

多方向拖拽改变元素大小

拖拽:1 onmousedown 存距离 disX/Y2 onmousemove 修改left top3 onmouseup 释放资源 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style> 7 #box{ 8 width: 100px; 9

UEditor 解决拖拽视频元素改变视频尺寸时,无法保存视频尺寸问题的解决方法

UEditor虽然强大,但是bug还是蛮多的.比如插入视频元素后,拖拽视频去缩放尺寸,编辑器并没有将实际的尺寸保存下来.当你点击HTML按钮查看源代码时,width和height还是原来的值,再次点击此按钮回到正常状态,缩略图又回到原来的大小了. 翻源代码翻了蛮久,终于把这个问题解决了.问题就出在插入视频后创建视频HTML字符串和HTML字符串与可视化编辑层转化的地方. 当视频上传完成后,创建一个img用于可视化编辑,将默认width和height设置到img的width和height的属性中.

拖拽改变div的大小

拖拽改变div的大小 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 6 <title>Resize</title> 7 <style type="text/css"> 8 #rRightDow