zoukankan      html  css  js  c++  java
  • 前端页面,使用 dom 鼠标拖拽画一个矩形和监听键盘

    <!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;
             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,
         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,
         $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>
    
    
  • 相关阅读:
    增强for循环
    java魔性的类型
    回溯算法
    UE4报错cmd.exe failed with args /c
    C#中GetHashCode的各类实现
    Unity3D中的meta文件笔记
    数值分析笔记(3)——数值计算中的原则
    数值分析笔记(2)——有效数字
    数值分析笔记(1)——误差的来源和分类
    数值分析笔记(0)——数值分析研究的对象和内容
  • 原文地址:https://www.cnblogs.com/htoooth/p/8639446.html
Copyright © 2011-2022 走看看