<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>RunJS</title>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<style type="text/css">
.container {
background: green;
height: 200px;
position: relative;
margin-left: 100px;
} .rect {
position: absolute;
top: 0;
left: 0;
width: 0;
height: 0;
border: 1px solid red;
background: rgba(230, 230, 230, 0.5);
}
</style>
</head>
<body>
<div class="container">
<div class="rect"></div>
</div>
<script> var $container = $(".container");
var $rect = $(".rect");
var parentOffset = $container.offset() var startPoint = null;
var isDown = null; function init(opts) {
$rect.css({
top: opts.top + 'px',
left: opts.left + 'px'
}); $rect.width(opts.width);
$rect.height(opts.height);
} function reset() {
init({
top: 0,
left: 0,
width: 0,
height: 0
}); $rect.hide();
} reset(); $rect.on('click', function(e) {
edit()
}); $container.on('mousedown', function(e) {
start(e);
}); $container.on("mousemove", function(e) {
move(e);
}) $container.on('mouseup', function(e) {
end(e);
}); $container.on('mouseleave', function(e) {
end(e);
}); document.addEventListener("keydown", keydown); function start(e) {
var re1 = $(e.target); if (re1.is($rect)) {
return
} isDown = true;
$rect.width(0);
$rect.height(0);
$rect.show(); startPoint = {
y: e.pageY - parentOffset.top,
x: e.pageX - parentOffset.left
}; $rect.css({
top: startPoint.y + 'px',
left: + startPoint.x + 'px'
});
} function move(e) {
if (isDown) {
$rect.width((e.pageX - parentOffset.left) - startPoint.x);
$rect.height((e.pageY - parentOffset.top )- startPoint.y);
}
} function end(e) {
if (!isDown) {
return;
} var x = e.pageX > (parentOffset.left + $container.width()) ? parentOffset.left + $container.width() : e.pageX;
var y = e.pageY > (parentOffset.top + $container.height()) ? parentOffset.top + $container.height() : e.pageY; $rect.width((x - parentOffset.left) - startPoint.x);
$rect.height((y - parentOffset.top )- startPoint.y);
isDown = false;
startPoint = null; save();
} function save() {
console.log({
top: $rect.position().top,
left: $rect.position().left,
width: $rect.width(),
height: $rect.height()
})
} function edit() {
console.log('edit');
} function goNext() {
console.log('goNext');
} function goPrev() {
console.log('goPrev');
} function keydown(e) {
if (e.key === 'd' || e.key === "Delete") {
reset();
e.preventDefault();
} else if (e.key === 'e') {
edit();
e.preventDefault();
} else if (e.key === 'ArrowRight' || e.key === "f" || e.key === "Enter") {
goNext();
e.preventDefault();
} else if (e.key === 'ArrowLeft' || e.key === "s") {
goPrev();
e.preventDefault();
}
} </script>
</body>
</html>

前端页面,使用 dom 鼠标拖拽画一个矩形和监听键盘的更多相关文章

  1. ArcGIS JS 学习笔记2 实现仿百度的拖拽画圆

    一.前言 吐槽一下,百度在国内除了百度地图是良心产品外,其他的真的不敢恭维.在上一篇笔记里,我已经实现了自定义的地图测量模块.在百度地图里面(其他地图)都有一个周边搜索的功能,拖拽画一个圆,然后以圆半 ...

  2. 鼠标拖拽定位和DOM各种尺寸详解

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. JS Event 鼠标拖拽事件

    <!DOCTYPE html><html> <head>        <meta charset="UTF-8">         ...

  4. WPF 在image控件用鼠标拖拽出矩形

    原文:WPF 在image控件用鼠标拖拽出矩形 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee ...

  5. 2018-11-19-WPF-在image控件用鼠标拖拽出矩形

    title author date CreateTime categories WPF 在image控件用鼠标拖拽出矩形 lindexi 2018-11-19 15:35:13 +0800 2018- ...

  6. CSharpGL(20)用unProject和Project实现鼠标拖拽图元

    CSharpGL(20)用unProject和Project实现鼠标拖拽图元 效果图 例如,你可以把Big Dipper这个模型拽成下面这个样子. 配合旋转,还可以继续拖拽成这样. 当然,能拖拽的不只 ...

  7. JavaScript鼠标拖拽特效及相关问题总结

    #div1{width:200px;height:200px;background:red;position:absolute;} #div2{width:200px;height:200px;bac ...

  8. 一款基于jQuery的支持鼠标拖拽滑动焦点图

    记得之前我们分享过一款jQuery全屏广告图片焦点图,图片切换效果还不错.今天我们要分享另外一款jQuery焦点图插件,它的特点是支持鼠标拖拽滑动,所以在移动设备上使用更加方便,你只要用手指滑动屏幕即 ...

  9. 【狼】unity 鼠标拖拽物体实现任意角度自旋转

    主要涉及函数 Input.GetAxis(“Mouse x”) 可取得鼠标横向(x轴)移动增量 Input.GetAxis(“Mouse y”) 可取得鼠标竖向(y轴)移动增量 通过勾股定理获取拖拽长 ...

随机推荐

  1. 51nod1674:区间的价值2(分治,利用&和|的收敛性)

    lyk拥有一个区间. 它规定一个区间的价值为这个区间中所有数and起来的值与这个区间所有数or起来的值的乘积. 例如3个数2,3,6.它们and起来的值为2,or起来的值为7,这个区间对答案的贡献为2 ...

  2. redis sentinel(哨兵)配置解读

    1 port <sentinel-port> :哨兵实例运行所在的端口(默认26379) 2 sentinel announce-ip:哨兵将会在gossip hello消息中使用指定的i ...

  3. AngularJS系统学习之Module(模块)

    本文源自:http://blog.csdn.net/woxueliuyun/article/details/50962645 学习之后略有所得, 来此分享.建议看原文. 模块是提供一些特殊服务的功能块 ...

  4. 1.5 sqoop安装及基本使用

    一.安装sqoop 1.解压 ##解压 [root@hadoop-senior cdh]# tar zxf sqoop-1.4.5-cdh5.3.6.tar.gz -C /opt/cdh-5.3.6/ ...

  5. 2.13 Hive中自带Function使用及自定义UDF编程

    UDF:User Definition Function 一.function #查看自带的函数 hive (db_hive)> show functions; #查看一个函数的详细用法 hiv ...

  6. TypeScript完全解读(26课时)_7.ES6精讲 - 类Class基础

    ES6精讲 - 类Class基础 es5中创建构造函数和实例 原来在es5中的写法 定义好Point后,在原型对象上定义getPostion的方法 实例自身是没有这个方法的,我们调用的时候会去创建他的 ...

  7. 技术胖Flutter第三季-18布局CardWidget 卡片布局组件

    技术胖Flutter第三季-18布局CardWidget 卡片布局组件 博客地址: https://jspang.com/post/flutter3.html#toc-420 最外面是Card布局,里 ...

  8. Flutter实战视频-移动电商-58.购物车_删除商品功能制作

    58.购物车_删除商品功能制作 主要做购物车后面的删除按钮 删除的方法写在provide里面 provide/cart.dart文件 传入goodsId,循环对比,找到后进行移除 //删除单个购物车商 ...

  9. PostgreSQL 务实应用(一/5)树形层级

    项目中,经常会碰到多级的树形结构数据,如地区信息,省.市.区.街道等,或客户关系信息上三级,下三级等. 实际项目中,我们可能碰到以下两种需求: 一条记录中呈现路径:省 - 市 - 区 - 街道 一条记 ...

  10. CodeForces599C【贪心】

    题意: 给你一个序列,要求你从小到大排序,你可以划分成一个块一个块地进行块内排序,问你最多能分成几个块 思路: 贪心,首先感觉就是有正序的话我就分开啊: 难道倒序不能分块?321肯定不行啊. 存不存在 ...