- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在实现“调整大小 handle ”来更改左侧导航面板的宽度。这是一个div
收到onMouseDown()
事件,计算必要的宽度并将它们应用于后续调用中的正确元素 onMouseMove()
.但我遇到了一些问题。
1) article
导航面板和句柄右侧的元素未激活 onMouseUp()
如果我在那里释放鼠标。这是因为 onMouseDown()
在其他元素中被激活?
2) 如果我向右快速移动鼠标,我无法阻止 article
中的文本从被选中,甚至调用像preventDefault()
这样的方法和 stopPropagation()
.
3) 即使 article
中没有文本,只有当我非常缓慢地移动鼠标时,调整大小才有效。如果鼠标在 article
上快速移动元素,调整大小停止,除非我释放鼠标按钮 - 在这种情况下,调整大小会顺利进行(表明它是停止调整大小的文本选择,即使根本没有文本)。但如果我松开鼠标按钮,调整大小应该停止(参见第 1 点)。
我见过一些使用 CSS 的解决方案 user-select: none
, 但这会阻止在 article
中选择任何文本,这显然是矫枉过正。
那么,当我将鼠标移到文档中的任何元素上时,如何在不选择任何文本的情况下平滑地调整大小? (当然是在按下右边的按钮 div
之后。)
这是我的 HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>CSS Template</title>
</head>
<body>
<header>Header</header>
<main>
<nav id='nav'>
<div class='navcont' onmousemove='handMm(event)' onmouseup='handMu(event)'>
<p>nav 1</p>
<p>nav 2</p>
</div>
<div class='handle' onmousedown='handMd(event)' onmousemove='handMm(event)' onmouseup='handMu(event)'>
</div>
</nav>
<article id='article' onmousemove='handMm(event)' onmouseup='handMu(event)'>
</article>
</main>
<footer>Footer</footer>
</body>
</html>
那是我的 CSS:
html, body {
height:100%;
margin:0;
}
body {
display:flex;
flex-direction:column;
}
header {
text-align:center;
}
main {
flex:1;
display:flex;
min-height:0;
}
article {
background:#CCC;
width:auto;
overflow:auto;
padding:10px;
flex-grow:1;
}
nav {
width:300px;
height:auto;
overflow: hidden;
display:flex;
}
.navcont {
background:#8C8;
width:auto;
flex-grow:1;
}
.handle {
background:#333;
right:0px;
width:30px;
cursor:col-resize;
}
footer {
text-align:center;
}
那是我的 Javascript:
var mx,px,moving=false;
function handMd(e) {
mx = e.pageX;
px = document.getElementById('nav').clientWidth;
moving = true;
}
function handMm(e) {
if (moving) {
e.preventDefault();
e.stopPropagation();
e.cancelBubble = true;
e.returnValue = false;
var diff = e.pageX - mx;
document.getElementById('nav').style.width = (px + diff)+'px';
document.getElementById('article').style.width = (window.innerWidth-px-diff)+'px';
}
}
function handMu(e) {
moving = false;
}
这是一个工作示例:https://jsfiddle.net/45h7vq7u/
另一个例子,包括瑞安徐的回答:https://jsfiddle.net/v1cmk2f6/1/ (文本选择消失了,但div仍然不会平滑移动,但只有快速向右移动时)。
最佳答案
使用您喜欢的方法捕获开始移动
和完成移动
的事件(onMouseDown
和onMouseUp
都可以).添加一个 CSS 类来指定 Action 开始时的移动状态。操作完成时删除 CSS 类。
对于您的情况,您可以尝试以下操作:
添加一个新的 CSS 类:
.moving {
user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
}
扩展您的 handMd()
和 handMu()
函数:
function handMd(e) {
mx = e.pageX;
px = document.getElementById('nav').clientWidth;
moving = true;
document.getElementById('article').classList.toggle('moving', true); // Add this line. 'article' is the id of the element where you don't want the selection to occur.
}
function handMu(e) {
moving = false;
document.getElementById('article').classList.toggle('moving', false); // Add this line. 'article' is the id of the element where you don't want the selection to occur.
}
关于javascript - 如何防止文本选择阻碍 onMouseMove 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44361408/
我确定我在这里遗漏了一些简单的东西,但我很难过。 为什么 addEventListener 和 removeEventListener 函数在这些 React 生命周期方法中不起作用,但它们下面的注释
我真的不知道如何在标题中表达这一点,但我正在尝试创建一个包含所有事件函数的类,但我遇到了奇怪的问题。 这是问题的一些模拟代码。 class Mouse{ constructor(){
我正在学习使用 onmousemove 事件,但无法使其工作,其想法是稍微倾斜图像以创建一种效果,就像它跟随鼠标一样,我猜是一种视差。这就是我想要实现的目标: https://tympanus.net
这个问题已经有答案了: How to get mouse position in jQuery without mouse-events? (7 个回答) 已关闭 3 年前。 在 Javascript
这个问题已经有答案了: What is the (function() { } )() construct in JavaScript? (28 个回答) 已关闭 3 年前。 我正在编写一些 Java
我有下一张 table : div class="container">
我正在尝试使用 javascript 创建一个自定义视频播放器,代码应该在 onmousemove 事件上显示叠加层它确实触发了代码但由于某种原因两次,我认为这是因为每个顶部都有双全屏 div其他,但
function aim() { var mousex = ? } 我找不到如何在 javascript 中获取 onmousemove 事件的鼠标坐标。 最佳答案 var guide =
我搜索了本博客和其他博客中提供的答案,但没有找到任何解决方案。非常感谢您的帮助。 我有一个 onmousemove 事件,它正在执行要触发的事件列表中的第一项,但不会执行第二项。 document.g
我正在我网页上的一个 div 中加载一个外部网页(即本例中的 www.duckduckgo.com)。我想在 div 内部和外部获取鼠标的 X 和 Y 位置,但是当我在 div 内部时,网页似乎阻止了
我正在做一个jsp页面,它记录了鼠标在该页面上的时刻。我有记录时刻的代码,但我不知道如何将总时刻的最终值传递给变量? onmousemove: Mouse over and leave me!
我已经对 javascript 中的事件进行了一些研究,但仍然无法弄清楚 onmousemove 中传递给事件的内容是什么。 摘自:W3schools onmousemove="show_coords
我想在单击鼠标并在元素上方更改背景颜色,并可以移动它,这样您就不必单击每个元素,而是能够用鼠标“绘制”。但我不知道怎么办。我现在的代码如下 function change_color(x, y) {
我的应用程序有 350 个编辑字段,所有这些字段都应有一个 OnMouseMove 事件。我已经为所有这些生成了以下代码: ... type ... procedure Edit1MouseMo
var zoomPad = document.getElementsByClassName('zoomPad'); zoomPad[0].onmouseover = function(){ v
这可能已得到解答,但无法在搜索中找到任何正面结果。 有一个脚本可以使用各种额外的计算来移动元素“正常” x,y 定位。 我没有使用 JQuery 或任何其他库,但这里有一个核心示例:>> fiddle
我这里有一个真正的问题。我希望仅当单击对象以及将鼠标移到对象上时才调用函数。这是一个示例(忽略奇怪的语法)以帮助您理解: 我正在想一个办法来解决这个问题。如果我创建一个 onMouseDown 来触
为了给我们的 Web 应用程序添加一些个性,我在某些元素上添加了一些动画,当鼠标靠近时,我们的机器人吉祥物会从后面窥视。为此,我使用 onmousemove 函数来检查光标的距离,并在鼠标靠近时为机器
大家好:)如果我在示例中使用鼠标指针传递 div,函数在控制台中打印两次,这意味着 onmousemove 事件被触发两次。我还打印了鼠标指针的坐标以及您如何在下图,我也没有垂直移动,只是水平移动。考
我正在实现“调整大小 handle ”来更改左侧导航面板的宽度。这是一个div收到onMouseDown()事件,计算必要的宽度并将它们应用于后续调用中的正确元素 onMouseMove() .但我遇
我是一名优秀的程序员,十分优秀!