元素大小缩放是一套连贯事件,按下鼠标不放,拖动鼠标 然后松开。

按下鼠标事件

当按下鼠标时,记录元素大小、鼠标按下的位置、状态位。

拖动鼠标事件

当鼠标拖动时,计算元素调用后的大小。

元素调整后大小 =  初始元素大小 + (鼠标移动位置 - 鼠标按下位置)

鼠标松开事件

当调整完成后,鼠标松开这时重置状态位,防止移动鼠标时触发移动事件。

'use strict';

class DivElement {

    /**
* 构造函数
* @param {object} option
* @param {HTMLElement} option.element
* @param {number} option.minwidth
* @param {number} option.minheight
*/
constructor({ element, minwidth, minheight }) {
this.element = element;
this.minheight = minheight;
this.minwidth = minwidth;
this.state = false;
} /**
* @returns {CSSStyleDeclaration}
*/
get style() {
return window.getComputedStyle(this.element);
} /**
* 调整大小
*/
resizable() {
let nodese = this._createSe('resizable-se');
let [mousedownX, mousedownY, width, height] = [0, 0, 0, 0]; // 鼠标按下
nodese.addEventListener("mousedown", (event) => {
this.state = true; // 设置状态位
[mousedownX, mousedownY, width, height] = [
event.clientX, // 鼠标按下时X坐标
event.clientY, // 鼠标按下时Y坐标
Number.parseFloat(this.style.width), // 获取元素宽度
Number.parseFloat(this.style.height), // 获取 元素高度
];
}); // 鼠标拖动
document.addEventListener("mousemove", (event) => {
if (this.state) {
let w = width + (event.clientX - mousedownX); // 调整后的宽度
let h = height + (event.clientY - mousedownY); // 调整后的高度
if (w > this.minwidth) { // 限制最小 宽度
this.element.style.width = w + 'px';
}
if (h > this.minheight) { // 限制最小 高度
this.element.style.height = h + 'px';
}
}
}) // 鼠标松开
this.element.addEventListener("mouseup", (event) => {
this.state = false; // 重置状态位
})
} _createSe(className) {
let node = document.createElement('div');
node.className = className;
this.element.appendChild(node);
return node;
}
}
<!DOCTYPE html>

<head>
<meta charset="utf8">
<title>缩放</title>
<script src="DivElement.js"></script>
<link rel="stylesheet" type="text/css" href="style.css">
</head> <body>
<div class="resizable">
<h2>右下角</h2>
</div> <script>
'use strict';
let o = new DivElement({
element: document.querySelector('.resizable'),
minwidth: 140,
minheight: 140
});
o.resizable(); </script>
</body> </html>
.resizable {
border: 1px #ccc solid;
float: left;
height: 200px;
width: 200px;
padding: 40px;
position: relative;
} .resizable-se {
cursor: se-resize;
width: 12px;
height: 12px;
right: 1px;
bottom: 1px;
background: url("ui-icons.png") no-repeat;
position: absolute;
}

样本:http://js.zhuamimi.cn/%E5%85%83%E7%B4%A0%E5%A4%A7%E5%B0%8F%E8%B0%83%E6%95%B4/

源码:https://pan.baidu.com/s/1f4n0NK6QzFnQokMSWf7kEg

我的百度经验:https://jingyan.baidu.com/article/1876c85223513b890b1376f5.html

js 元素大小缩放实例的更多相关文章

  1. js中窗口大小和单个元素大小的计算

    1. 窗口的大小即浏览器的大小: window.innerWidth, window.innerHeight, window.outerHeight, window.outerWidth 在IE9+, ...

  2. canvas元素大小与绘图表面大小

    原文链接:canvas总结:元素大小与绘图表面大小 前言 我们使用canvas的时候一般在canvas元素中直接设置它的width和height: 1 <canvas id="myCa ...

  3. JS控制SVG缩放+鼠标控制事件

    话不多说,直接上代码吧,不行你砍我... <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  4. 【转】JS大总结(带实例)

    JS大总结(带实例) JavaScript事务查询综合click() 对象.click() 使对象被点击.closed 对象.closed 对象窗口是否已封闭true/falseclearTimeou ...

  5. dojo/dom-geometry元素大小

    在进入源码分析前,我们先来点基础知识.下面这张图画的是元素的盒式模型,这个没有兼容性问题,有问题的是元素的宽高怎么算.以宽度为例,ff中 元素宽度=content宽度,而在ie中 元素宽度=conte ...

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

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽改变元素大小的效果,您可以根据自己的实际需求来设置被 ...

  7. canvas总结:元素大小与绘图表面大小

    前言 我们使用canvas的时候一般在canvas元素中直接设置它的width和height: <canvas id="myCanvas" width="300&q ...

  8. 【前端】vue.js环境配置以及实例运行简明教程

    vue.js环境配置以及实例运行简明教程 声明:本文档编写参考如下两篇博客,是对它们的修改与补充,欢迎点击链接查看原文: 原文1:vue.js在windows本地下搭建环境和创建项目 原文2:Vue. ...

  9. Javascript高级编程学习笔记(52)—— DOM2和DOM3(4)元素大小

    在日常实践中,我们在使用JS的时候难免会需要获取元素的大小及位置 首先要声明的是,这一部分的内容并不属于DOM2样式规范,因为DOM中并没有对我们如何获取元素大小的相关信息做出规范 偏移量 偏移量及元 ...

随机推荐

  1. 全国计算机等级考试二级Python语言程序设计考试大纲

    全国计算机等级考试二级Python语言程序设计考试大纲(2018年版) 基本要求 掌握Python语言的基本语法规则. 掌握不少于2个基本的Python标准库. 掌握不少于2个Python第三方库,掌 ...

  2. C++ 知识回顾总结 -- queue 队列容器

    一.说明 queue 是一种队列适配器,专门设计用于FIFO中操作(先进先出),元素从一端插入容器并从另一端提取. 相关API地址为:http://www.cplusplus.com/referenc ...

  3. Java学习笔记一:数据类型I

    GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/IntPractice1.java https://github.com ...

  4. Java思维理清思路

    Java思维导图 学习方法: 针对性学习 引导式学习 对比式学习 总结式学习 Java简介: 简单性,面向对象,分布式,健壮性,安全性,平台独立与可移植性,多线程,多态性等. Java三大体系:Jav ...

  5. 第43节:Java学前要点

    Java学前要点 01 学习Java,有人推荐去培训,有人说没用,其实有钱的,不知道如何学,或者逼不得已去的就可以,也有人自己为了不花这些钱,而选择自学,我觉得也行. 现在大部分人学东西要学的好,都是 ...

  6. python元组和字典的简单学习

    元组(tuple) 用圆括号()标识,定义元组后,元组元素不可修改.如果想修改元组只能重新定义元组. 因为元组不可更改,所以也没有增删改等用法,主要语法就是访问元组元素,遍历元组. 访问元组元素: t ...

  7. c++多继承多态

    C++多继承多态的实现 如果一个类中存在虚函数,在声明类的对象时,编译器就会给该对象生成一个虚函数指针,该虚函数指针指向该类对应的虚函数表. 多态的实现是因为使用了一种动态绑定的机制,在编译期间不确定 ...

  8. [EXP]windows全版本SMB溢出工具加强版

    工具:k8加强版zzz 编译:python 漏洞:MS17-010 用法: zzz_exploit.exe 192.11.22.82zzz_exploit.exe 192.11.22.82 exe参数 ...

  9. Java核心技术及面试指南 异常部分的面试题归纳以及答案

    4.2.4.1 throw和throws有什么差别?异常(Exception)和错误(Error)有什么差别? throw语句表示抛出异常,由方法体内的语句处理.throws语句用在方法声明后面,表示 ...

  10. 【jQuery】(4)---jQuery常用事件

    [jQuery入门](4)---jQuery常用事件 一.常用事件列表 1.blur() 当失去焦点时触发.包括鼠标点击离开和TAB键离开. 2.change() 当元素获取焦点后,值改变失去焦点事触 ...