Получение элементов из выделенной области в Javascript - PullRequest
4 голосов
/ 14 августа 2011

Мне нужно реализовать получение элементов из выбранной области в Javascript.Это необходимо для создания лучшего настольного пользовательского интерфейса в приложении Chrome.Ближайшим примером является выбор области в расширении Imgur:

screenshot

Итак, вопрос:

  1. Как этот выбор может бытьсделано в javascript?
  2. Как получить элементы из этого выбора?

Ответы [ 2 ]

4 голосов
/ 15 августа 2011

Я нашел это интересным, поэтому я сделал что-то с нуля, используя jQuery, потому что иначе это было бы слишком сложно: http://jsfiddle.net/EuSBU/1/.

Я надеюсь, что это достаточно просто, чтобы следовать, пожалуйста, спросите, есть ли что-тохочу знать.

Это сводится к проверке каждого элемента, инкапсулирует ли его прямоугольник.

$("#start_select").click(function() {
    $("#select_canvas").show();
});

$('*').bind('selectstart', false);

var start = null;
var ctx = $("#select_canvas").get(0).getContext('2d');
ctx.globalAlpha = 0.5;

$("#select_canvas").mousedown(function(e) {
    start = [e.offsetX, e.offsetY];

}).mouseup(function(e) {
    end = [e.offsetX, e.offsetY];

    var x1 = Math.min(start[0], end[0]),
        x2 = Math.max(start[0], end[0]),
        y1 = Math.min(start[1], end[1]),
        y2 = Math.max(start[1], end[1]);

    var grabbed = [];
    $('*').each(function() {
        if(!$(this).is(":visible")) return;

        var o = $(this).offset(),
            x = o.left,
            y = o.top,
            w = $(this).width(),
            h = $(this).height();

        if(x > x1 && x + w < x2 && y > y1 && y + h < y2) {
            grabbed.push(this);
        }
    });
    console.log(grabbed);

    start = null;

    $(this).hide();

}).mousemove(function(e) {
    if(!start) return;

    ctx.clearRect(0, 0, this.offsetWidth, this.offsetHeight);
    ctx.beginPath();

    var x = e.offsetX,
        y = e.offsetY;

    ctx.rect(start[0], start[1], x - start[0], y - start[1]);
    ctx.fill();
});
0 голосов
/ 14 августа 2011

Этот код сделает выбор из текстовой области, как только вы нажмете кнопку.

<script language=javascript>
function getSelText()
{
    var txt = '';
     if (window.getSelection)
    {
        txt = window.getSelection();
             }
    else if (document.getSelection)
    {
        txt = document.getSelection();
            }
    else if (document.selection)
    {
        txt = document.selection.createRange().text;
            }
    else return;
document.aform.selectedtext.value =  txt;
}
</script>
<input type="button" value="Get selection" onmousedown="getSelText()"> 
<form name=aform >
<textarea name="selectedtext" rows="5" cols="20"></textarea>
</form>
...