问题是:js是如何实现鼠标移动到不同栏位切换对应的显示内容的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了问题是:js是如何实现鼠标移动到不同栏位切换对应的显示内容的?相关的知识,希望对你有一定的参考价值。

给你一个示例代码吧,引用了jQuery框架。你可以将这个js文件下载到本地或直接使用例子中的远程地址(不过由于国内google经常访问不了建议下载下来)

<!DOCTYPE html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script type="text/javascript">
        function switchContentBox(obj) 
            obj = $(obj);
            var contentBox = obj.parents('div.box:first').children('div.content');
            var index = obj.attr('item');
            contentBox.children().hide();
            contentBox.children(':eq(' + index + ')').show();
        
    </script>
</head>
<body>
<div class="box">
    <div class="title">
        <span item="0" onmouseover="switchContentBox(this)">Demo1</span>
        <span item="1" onmouseover="switchContentBox(this)">Demo2</span>
    </div>
    <div class="content">
        <div>Content of Demo1</div>
        <div style="display: none;">Content of Demo2</div>
    </div>
</div>
</body>
</html>

参考技术A 鼠标的移入(onmouseover)事件实现。
1、当鼠标移入一个栏位时,触发移入事件,这个事件负责将当前栏位对应内容显示,其他内容隐藏
参考技术B mouseenter,mouseleave等mouse事件触发对应模块的显示隐藏

JS拖拽元素原理及实现代码

拖拽功能主要是用在让用户做一些自定义的动作,比如拖动排序,弹出框拖动移动等等,效果还是蛮不错的。下面讲解一下拖拽的原理,希望可以帮助到有需要的朋友!

一、拖拽的流程动作
①鼠标按下
②鼠标移动
③鼠标松开

二、拖拽流程中对应的JS事件
①鼠标按下会触发onmousedown事件

[javascript] view plain copy
 
  1. obj.onmousedown = function(e) {  
  2.       //..........  
  3. }  

②鼠标移动会触发onmousemove事件

[javascript] view plain copy
 
  1. obj.onmousemove = function(e) {  
  2.     //......  
  3. }  

③鼠标松开会触发onmouseup事件

[javascript] view plain copy
 
  1. obj.onmouseup = function() {  
  2.      //......  
  3. }  


三、实现的原理讲解
拖拽其实是通过获取鼠标移动的距离来实现的,即计算移动前的位置的坐标(x,y)与移动中的位置的坐标(x,y)差值。
当鼠标按下或鼠标移动时,都可以获取到当前鼠标的位置,即移动前的位置与移动中的位置。
那么上面①与②的代码就应该变成这样

[javascript] view plain copy
 
  1. var mouseDownX,mouseDownY  // 因在移动中需计算鼠标的偏移需要用到鼠标按下时的坐标,固声明称全局变量  
  2. obj.onmousedown = function(e) {  
  3.     mouseDownX = e.pageX;  
  4.     mouseDownY = e.pageY;  
  5. }  
  6.   
  7. obj.onmousemove = function(e) {  
  8.     var mouseMoveX = e.pageX,mouseMoveY = e.pageY;  
  9. }  

移动前与移动后坐标有了,那么计算偏移,先看下图
技术分享图片

 

很明显移动后元素的X坐标为  鼠标移动后的X坐标 - 鼠标按下的X坐标 + 元素的初始X坐标
Y坐标为  鼠标移动后的Y坐标 - 鼠标按下的Y坐标 + 元素的初始Y坐标
把新的 X,Y 替换元素的 X,Y 就搞定了。
那么代码就应该更换为:

[javascript] view plain copy
 
  1. var mouseDownX,mouseDownY,initX,initY,flag = false;  
  2. obj.onmousedown = function(e) {  
  3.     //鼠标按下时的鼠标所在的X,Y坐标  
  4.     mouseDownX = e.pageX;  
  5.     mouseDownY = e.pageY;  
  6.   
  7.     //初始位置的X,Y 坐标  
  8.     initX = obj.offsetLeft;  
  9.     initY = obj.offsetTop;  
  10.   
  11.     //表示鼠标已按下  
  12.     flag = true;  
  13. }  
  14. obj.onmousemove = function(e) {  
  15.     // 确保鼠标已按下  
  16.     if(flag) {  
  17.         var mouseMoveX = e.pageX,mouseMoveY = e.pageY;  
  18.         this.style.left = parseInt(mouseMoveX) - parseInt(mouseDownX) + parseInt(initX) + "px";  
  19.         this.style.top = parseInt(mouseMoveY) - parseInt(mouseDownY) + parseInt(initY) + "px";  
  20.     }  
  21.       
  22. }  
  23. obj.onmouseup = function() {  
  24.     //标识已松开鼠标  
  25.     flag = false;  
  26. }  
 

需要注意的事,如果用jquery库来写的话三个事件为mousedown、mousemove、mouseup,名称稍微有点差别。

 

还有一点,被拖拽的元素的样式要设置成绝对或相对位置才有效果。

至此,最简单的元素拖拽功能就讲完了~~~~

如有不正确之处欢迎大家指正!













以上是关于问题是:js是如何实现鼠标移动到不同栏位切换对应的显示内容的?的主要内容,如果未能解决你的问题,请参考以下文章

vue中鼠标移入移出,怎么让其切换到里面的内容

js鼠标单击实现图片切换?

mac 多屏间鼠标快速移动

js中鼠标移动事件触发时,如何获得当前鼠标在哪一个元素上

原生js实现轮播图

JS拖拽元素原理及实现代码