如果鼠标指针通过mousedown使用jQuery传递给它,那么获取li值?

时间:2016-09-23 06:34:20

标签: javascript jquery html swipe

我正在使用虚拟键盘,它与Windows中的屏幕键盘相同。

问题:我希望添加 swype 键盘的功能,用户通过拖动来输入单词 用鼠标在一个单词的第一个字母到它的最后一个字母。是否可以用鼠标实现这一目标?

问题:到目前为止,我已尝试使用jQuery swipe事件,其中我有多个li作为键并且从键中拖动 另一个li元素的文本是我得到的。

如何在拖动时获取鼠标指针所经过的所有键值,这类似于Android swype键盘?

enter image description here

选中此Fiddle Demo

$("li").on("swipe", function() {
    $('#input').append($(this).text());
});



$(document).ready(function() {
    $("li").on("swipe", function() {
        $('#input').append($(this).text());
    });
});

* {
    margin: 0;
    padding: 0;
}
body {
    font: 71%/1.5 Verdana, Sans-Serif;
    background: #eee;
}
#container {
    margin: 100px auto;
    width: 688px;
}
#write {
    margin: 0 0 5px;
    padding: 5px;
    width: 671px;
    height: 200px;
    font: 1em/1.5 Verdana, Sans-Serif;
    background: #fff;
    border: 1px solid #f9f9f9;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
}
#keyboard {
    margin: 0;
    padding: 0;
    list-style: none;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
#keyboard li {
    float: left;
    margin: 0 5px 5px 0;
    width: 40px;
    height: 40px;
    line-height: 40px;
    text-align: center;
    background: #777;
    color: #eaeaea;
    border: 1px solid #f9f9f9;
    border-radius: 10px;
}
.capslock,
.tab,
.left-shift {
    clear: left;
}
#keyboard .tab,
#keyboard .delete {
    width: 70px;
}
#keyboard .capslock {
    width: 80px;
}
#keyboard .return {
    width: 77px;
}
#keyboard .left-shift {
    width: 95px;
}
#keyboard .right-shift {
    width: 109px;
}
.lastitem {
    margin-right: 0;
}
.uppercase {
    text-transform: uppercase;
}
#keyboard .space {
    clear: left;
    width: 681px;
}
.on {
    display: none;
}
#keyboard li:hover {
    position: relative;
    top: 1px;
    left: 1px;
    border-color: #e5e5e5;
    cursor: pointer;
}
li p {
    display: block!important;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
<link href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css" rel="stylesheet"/>

<div data-role="page" id="pageone">
  <div id="container">
    <textarea id="input" rows="6" cols="60"></textarea>
    <ul id="keyboard">
    <li class="symbol"><p>`</p></li>
        <li class="symbol"><p>1</p></li>
        <li class="symbol"><p>2</p></li>
        <li class="symbol"><p>3</p></li>
        <li class="symbol"><p>4</p></li>
        <li class="symbol"><p>5</p></li>
        <li class="symbol"><p>6</p></li>
        <li class="symbol"><p>7</p></li>
        <li class="symbol"><p>8</p></li>
        <li class="symbol"><p>9</p></li>
        <li class="symbol"><p>0</p></li>
        <li class="symbol"><p>-</p></li>
        <li class="symbol"><p>=</p></li>
        <li class="delete lastitem"><p>delete</p></li>
        <li class="tab"><p>tab</p></li>
        <li class="letter"><p>q</p></li>
        <li class="letter"><p>w</p></li>
        <li class="letter"><p>e</p></li>
        <li class="letter"><p>r</p></li>
        <li class="letter"><p>t</p></li>
        <li class="letter"><p>y</p></li>
        <li class="letter"><p>u</p></li>
        <li class="letter"><p>i</p></li>
        <li class="letter"><p>o</p></li>
        <li class="letter"><p>p</p></li>
        <li class="symbol"><p><span class="off">[</span><span class="on">{</span></p></li>
        <li class="symbol"><p><span class="off">]</span><span class="on">}</span></p></li>
        <li class="symbol lastitem"><p><span class="off">\</span><span class="on">|</span></p></li>
        <li class="capslock"><p>caps lock</p></li>
        <li class="letter"><p>a</p></li>
        <li class="letter"><p>s</p></li>
        <li class="letter"><p>d</p></li>
        <li class="letter"><p>f</p></li>
        <li class="letter"><p>g</p></li>
        <li class="letter"><p>h</p></li>
        <li class="letter"><p>j</p></li>
        <li class="letter"><p>k</p></li>
        <li class="letter"><p>l</p></li>
        <li class="symbol"><p><span class="off">;</span><span class="on">:</span></p></li>
        <li class="symbol"><p><span class="off">'</span><span class="on">&quot;</span></p></li>
        <li class="return lastitem"><p>return</p></li>
        <li class="left-shift"><p>shift</p></li>
        <li class="letter"><p>z</p></li>
        <li class="letter"><p>x</p></li>
        <li class="letter"><p>c</p></li>
        <li class="letter"><p>v</p></li>
        <li class="letter"><p>b</p></li>
        <li class="letter"><p>n</p></li>
        <li class="letter"><p>m</p></li>
        <li class="symbol"><p><span class="off">,</span><span class="on">&lt;</span></p></li>
        <li class="symbol"><p><span class="off">.</span><span class="on">&gt;</span></p></li>
        <li class="symbol"><p><span class="off">/</span><span class="on">?</span></p></li>
        <li class="right-shift lastitem"><p>shift</p></li>
    </ul>
</div>
</div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:7)

如果您使用jQuery的悬停功能以及跟踪鼠标按下按钮的状态,它就可以正常工作。

<强>使用Javascript:

$(document).ready(function() {
    var mouseDown = 0;
    document.body.onmousedown = function() { 
        mouseDown = 1;
    }
    document.body.onmouseup = function() {
        mouseDown = 0;
    }

    $("li").hover(function() {
        if (mouseDown) {
            $('#input').append($(this).text());
        }
    }, function() {
      // do nothing
    });

    $("li").on("mousedown", function() {
        $('#input').append($(this).text());
    });
});

我在这里做的是检查&#34; li&#34;元素被悬停,如果鼠标按钮关闭,请将其添加到输入中。

另请注意最后一位,即鼠标在&#34; li&#34;元素第一次。 (由于您将鼠标悬停在第一个按钮上,然后在使用鼠标单击之前开始滑动一个按钮。这可以防止我们错过滑动序列的第一个字母。)

使用JSFiddle:https://jsfiddle.net/bLt0j5t9/1/