这一段代码是根据上一篇“监听列表事件的监控”所编写的,在onmousemove事件中,可以通过事件对象获取到鼠标当前的坐标点,我们该如何将坐标点转化成为元素的left和top属性值就是拖动技术的核心呢?我们就是能够把鼠标的移动在所需的一定空间坐标来实现我们把握要列表事件中的定位置的坐标,也就是不停地移动鼠标时我们便会发现coord中的坐标信息不断地被更新;注意,可视范围是除了菜单条和状态条外的整个浏览器窗口,因为监听的是document的事件是经过修改监听对象为dragger来观察效果。例如:onmousemove事件没有任何前置条件,来获取鼠标光标在整个浏览器的窗口中的当前坐标:<!-坐标显示框-->

<div  id=' coord '>

</div>

<script>

//监听 document 的 事件  ( 是把所监听的对象事件用来进行修改监听对象的)

document. = function (e) {

e = e| |event;

//更新坐标信息

document.getElementById('coord').innerHTML= e.clientx+":"+e.clientY;

}

</Script>

在应用onmousemove事件的同时,鼠标的移动事件;包括左键、右键和滚轮。与onmousedown事件成相反,并且只能在onmousedown事件发生后才能发生onmouseup事件,是因为只有案件被按下后才会发生弹起。当鼠标按键在dragger上按下时,onmousedown事件将被触发,提示框显示“元素被拿起”。

与其同时,无论元素的定位方式是绝对的还是相对的,要让它动起来就只有不断地更新它的left和top的属性;编写的代码与事件。

<style>

#dragger  {

;

height:100px;

background:#ccc;

position:relative;

}

</style>

<div  id='dragger'></div>

<script>

var  dragger  =  document.getElementById('dragger');

//监听鼠标事件

dragger. =  function ()  {

if (!dragger.onmousemove)

dragger. =  function ()  {

//设置x坐标

this.style.left  =  event.clientX ;

//设置Y坐标

this.style.top  =  event.clientY ;

}

}

dragger. = function () {

alert ("元素被放下") ;

}

<script>

我们把代码运行的结果是在dragger上监听 dragger. = function () {

//设置X坐标

this.style.left = event.clientX ;

//设置Y坐标

this.style.top = event.clientY ;

想到这我们便把它修改为: dragger. = function () {

//设置X坐标

this.style.left = event.clientX - 50 ;

//设置Y坐标

this.style.top = event.clientY -  50 ;

虽然没有在快速移动鼠标时因为dragger的移动速度跟不上鼠标的移动速度,会导致dragger脱标而无法监听鼠标事件从而失去了移动功能,为了解决问题我们要在元素级别更高的地方进行监听,document的代码:

<script>

var  dragger = document.getElementById ('dragger') ;

//监听鼠标事件

dragger. = function () {

if (!document.onmousemove)

document. = function () {

//设置X坐标

dragger.style.left = event.clientX ;

//设置Y坐标

dragger.style.top = event.clientY ;

}

}

document. = function () {

document. = null ;

}

</script>

从现在看来这样输入代码效果就比较“完美”了,document作为DOM级别最高的元素,在它上面进行事件监听最好不过了;但是别忘了在松开鼠标时把onmousemove事件去掉,这个原因与在给dragger设置onmousedown事件时才绑定onmousemove事件的原因相同,所以拖了它才能动,不拖动它的时候就不能动。事件的本身先后没有顺序,所以onmousemove在任何时候都会触发,代码中也要进行控制。

这并没有使我们如愿,也没达到“核心技术”;虽然我们已经完成了一些主要的步骤,我们还虽要解决一个问题,设置计算鼠标点相对于元素的简距。下面我们来解决这个问题:

<script>

var dragger = document.getElementById('dragger') ;

//监听鼠标事件

dragger. = function () {

//获取鼠标当前坐标

var pageX = event.clientX ;

var pageY = event.clientY ;

//获取元素坐标

//当没有设置left和top属性时,IE下默认值为auto

var offx = parseInt (this.currentStyle.left)  || 0 ;

var offY = parseInt (this.currentStyle.top)  || 0 ;

//获取鼠标相对于元素的间距

var offXL = pageX – offX ;

var offYL = pageY  -  offY ;

if ( !document. )

document. = function () {

//设置X坐标

dragger.style.left = event.clientX – offXL ;

//设置Y坐标

dragger.style.top = event.clientY -  offYL ;

}

}

document. = function () {

document. = null ;

}

</script>

运行代码后,会发现已经完全解决了拖动开启的闪动问题,在鼠标点和元素左上角坐标之间存在着间距,如果直接把鼠标点坐标赋给元素,那么这一部分间距就会消失掉,从而造成拖动开启闪动;好在这个间距能在鼠标单击后按键就被确定了,所以只需要在onmousedown事件中获取这个间距,然后在onmousemove实践中移动时用鼠标坐标减去这间距,就可以得到元素的坐标了。如图示:

1.鼠标边距

2.元素边距

监听列表事件的监控核心技术(编写代码)相关推荐

  1. 浅析 postMessage 方法介绍、如何接收数据(监听message事件及其属性介绍)、使用postMessage的安全注意事项、具体使用方式(父子页面如何互发消息、接收消息)

    postMessage 是 html5 引入的API,postMessage()方法允许来自不同源的脚本采用异步方式进行有效的通信,可以实现跨文本文档.多窗口.跨域消息传递,多用于窗口间数据通信,这也 ...

  2. java swing列表数据加监听,【Java Swing公开课|Java监听列表项选择事件怎么用,看完这篇文章你一定就会了】- 环球网校...

    [摘要]作为一门面向对象编程语言,Java吸收了C++语言的优点,也展现了其强大的一面,我们能在各个地方看到其功能强大和简单易用的两个特征,当然,也吸引了很多程序员的注意力,所以就有人想了解Java的 ...

  3. chromedp网络监听_动态爬虫三:监听网络事件 + 监听js事件

    一: 概述 上两篇文章介绍了cdp协议和chromedp库,从这篇文章开始动手实战一下,我们要拿到页面上更多的网络请求,最直接的想法就是类似于开发者工具里的network,只有一有网络请求就显示在列表 ...

  4. Web3j通过合约地址监听transfer事件获取以太坊交易数据

    Web3j通过合约地址监听transfer事件获取以太坊交易数据 We3j web3j是一个轻量级的Java库,用于在Ethereum网络上集成客户端(节点). 核心特性 通过Java类型的JSON- ...

  5. Android事件的响应,Android 开发事件响应之基于监听的事件响应

    Android 开发事件响应之基于监听的事件响应 本文将介绍Android 操作系统如何通过监听来实现对事件的响应. Android 开发事件响应之基于监听的事件响应 背景介绍 Android 开发事 ...

  6. 监听列表ListVIew的滑动状态

    /*监听列表的滑动状态:暂时用不到* SCROLL_STATE_FLING 时让图片不显示,提高滚动性能让滚动小姑更平滑* SCROLL_STATE_IDLE 时显示当前屏幕可见的图片*/mListV ...

  7. android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)

    ListView的主要有两种滑动事件监听方法,OnTouchListener和OnScrollListener 1.OnTouchListener OnTouchListener方法来自View中的监 ...

  8. 监听滚动事件 实现动态锚点

    前几天做项目的时候,需要实现一个动态锚点的效果 如果是传统项目,这个效果就非常简单.但是放到 Vue 中,就有两大难题: 1. 在没有 jQuery 的 animate() 方法的情况下,如何实现平滑 ...

  9. vue 监听滚动事件之菜单滚动吸顶点击滑动到指定位置点击高亮

    ###菜单滚动吸顶效果: ###html: <section class="switchModule" id="switchModule">< ...

最新文章

  1. mysql中count(*)和count(1)和count(column)区别
  2. Corn Fields(POJ-3254)
  3. EIGRP负载均衡实验(如有疑问,请留言)
  4. bootstrap基础样式学习(二)——栅格
  5. 扩展 MongoDB.Driver 支持实体
  6. TUIO - Radar - Unity
  7. Day_15JavaSE 异常
  8. 堪比端游!欧美十大RPG网页游戏推荐
  9. 互联网早报:微信内测深度清理功能内存,可一键清理缓存
  10. 《雍正皇帝·九王夺嫡》物质文化专有词泰译研究(二)
  11. 软谋在线教育推荐好书(一)
  12. Web_制作页面开场动画并解决自动播放问题
  13. Javaweb二手交易平台(完整版)
  14. 刀片服务器性能对比,刀片服务器对比-刀锋上的较量
  15. linux查询历史登入系统的主机名称或IP地址
  16. linux蓝牙传送的文件存放,嵌入式蓝牙文件传送方案的实现
  17. 金蝶K3采购暂估案例4商业模式单到冲回
  18. 30万手表推荐_港剧演员的逼格有多高?30万的手表随便戴!
  19. Guitar Pro8吉他谱中文正式版
  20. Java JSF网上资源大全(持续更新)

热门文章

  1. ORACLE复合索引使用 注意事项
  2. [转] 哈佛大学研究:一个人成为废物的九大根源
  3. Eugeny and Array(水题,注意题目描述即可)
  4. Integer的==问题
  5. AndroidTv Home界面实现原理(二)——Leanback 库的主页卡位缩放动画源码解析
  6. Java 对象引用以及对象赋值
  7. 在Linux中创建静态库和动态库 (转)
  8. Entity Framework数据库初始化四种策略
  9. 文本处理三剑客之 awk
  10. AttributeError: module 'tensorflow' has no attribute 'sub'