Запретить элементу "захватывать" мышь с помощью jQuery?

Я пытаюсь изменить размер встроенного объекта. Проблема в том, что когда мышь наводит курсор на объект, он берет на себя «управление» мышью, поглощая события движения. В результате вы можете расширить div, содержащий объект, но при попытке его сжать, если мышь входит в область объекта, изменение размера останавливается.

В настоящее время я скрываю объект во время движения. Мне интересно, есть ли способ просто предотвратить захват мыши объектом. Возможно, наложение другого элемента поверх него, не позволяющего событиям мыши достигать внедренного объекта?


использование ореола при изменении размера не работает для встроенных объектов, кстати.


Добавление награды, так как я никогда не смогу заставить это работать. Чтобы собрать, просто сделайте следующее:

Предоставьте веб-страницу со встроенным PDF-файлом по центру страницы. PDF-файл не может занять всю страницу; сделайте его ширину / высоту 50% ширины окна браузера или что-то в этом роде.

Используйте jQuery 1.2.6, чтобы изменить размер всех сторон и углов PDF-файла.

PDF-файл НЕ ДОЛЖЕН ЗАХВАТЫВАТЬ МЫШЬ и прекращать перетаскивание при сжатии PDF-файла. Это означает, что когда я нажимаю на край PDF-файла и перетаскиваю, когда мышь входит в поле отображения PDF-файла, операция изменения размера продолжается.

Это должно работать в IE 7. Хаки с условным CSS (если gte ie7 или что-то еще) подойдут.


Хммм ... Я думаю, это может быть проблема с iframe ...

    <div style = "text-align:center; padding-top:50px;">
    <div id = "doc" style = "width:384px;height:512px;">
    <iframe id = "docFrame" style = "width: 100%; height: 100%;"
 src='http://www.ready.gov/america/_downloads/sampleplan.pdf'>
    </iframe></div></div>
    <div id = "data"></div>
    <script type = "text/javascript">
        $(document).ready(function() {
        var obj = $('#docFrame');
            $('#doc').resizable({handles:'all', resize: function(e, ui) {
                $('#data').html(ui.size.width + 'x' + ui.size.height);
                obj.attr({width: ui.size.width, height: ui.size.height});
            }});
        });
    </script>

Это не работает. Когда ваша мышь попадает в iframe, операция изменения размера останавливается.


Есть несколько хороших ответов; если награда закончится до того, как я смогу их проверить, я восстановлю награду (те же 150 баллов).

Встроенный объект как вспышка или ударная волна?

Ken 07.10.2008 00:24

Это программа просмотра документов xps. У меня была такая же проблема с программой просмотра PDF от Adobe.

user1228 07.10.2008 15:37

Эй, вы можете показать код для создания этого встроенного PDF-файла, о котором вы говорите? Я попробую.

Paolo Bergantino 27.01.2009 20:39

Чувак, давай. Я отказываюсь от очков по этому поводу. Поищи в Гугле.

user1228 27.01.2009 22:12

У меня есть. Я не могу найти чертову программу просмотра документов xps на странице, хоть убей.

Paolo Bergantino 28.01.2009 00:38
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
2
5
2 679
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Оверлей.

Одно слово запрещено отвечать, в этом предложении нет глагола.

Извини, я новичок. Пример кода приветствуется, так как наложение jquery в Google не особо помогает.

user1228 07.10.2008 00:03

Вы можете просто добавить скрытый элемент наложения, который перекрывает объект, для которого установлено значение 100% высоты / ширины, и переключать его во время изменения размера. Я отправлю псевдокод в качестве отдельного ответа, если этой информации недостаточно для продолжения.

eyelidlessness 07.10.2008 03:45

Если вы можете заставить его работать и продемонстрировать это, возьмите награду. Я не могу получить проклятый оверлей, чтобы сделать джек шизнит.

user1228 27.01.2009 18:55

Я отвечу на оверлей, но приведу реальный код: P

Я называю его «последователем» вместо наложения и используется в моем подключаемом модуле ThreeSixty для jQuery (предоставлен довольно простой исходный код, вы поймете, читая, что происходит с div «последователя».

http://www.mathieusavard.info/threesixty

Ответ принят как подходящий

Ну, мне совершенно не удалось найти пример средства просмотра документов XPS или еще чего-то, но я смог придумать this working sample. Он не использует идею наложения, но это PDF-файл, размер которого можно изменить ...

редактировать то, что сделало эту работу без оверлея, - это параметр wmode, установленный на transparent. Я не очень хорошо разбираюсь в деталях, но это сделало его приятным в IE7. Также работает в Firefox, Chrome, Safari и Opera.

У новое редактирование серьезные проблемы с его работой с фреймами. Некоторая информация, которую я нашел, не очень обнадеживает. А с <object> это невозможно? Или <object> внутри iframe?

Дайте мне пару дней, чтобы проверить это; образец хорошо смотрится с флеш-бумагой, но может гадить на xps / pdf.

user1228 28.01.2009 18:17

Обновил вопрос с образцом кода. Я не думал, что iframe все испортил ...

user1228 28.01.2009 19:36

Возможно SmartLook - альтернатива. Это похоже на сценарии для лайтбоксов, но для встроенного контента, такого как PDF-файлы.

Это интересно, но я не могу использовать его в этом проекте. Спасибо за информацию.

user1228 01.02.2009 19:49

Вот что работает для меня, хотя при изменении размера он скрывает iframe. Это проблема для вас?

$(document).ready(function() {
    var obj = $('#docFrame');
    $('#doc').resizable(
    { 
        handles: 'all', 
        resize: function(e, ui) {
            $('#data').html(ui.size.width + 'x' + ui.size.height);
            obj.attr({ width: ui.size.width, height: ui.size.height });
        },
        start: function(e, ui) { $('#docFrame').hide(); },
        stop: function(e, ui) { $('#docFrame').show(); }
    });
});

потому что он сказал: «В настоящее время я прячу объект во время движения. Мне интересно, есть ли способ просто предотвратить захват мыши объектом». Я не уловил этот комментарий о том, как он сейчас это делает, когда впервые прочитал его. :)

Jab 02.02.2009 19:54

В IE вы можете вызвать setCapture () / releaseCapture (), у меня он отлично работал с iframe.

С Firefox - прозрачное наложение, как уже предлагалось.

Благодаря новой функции StackOverflow «Недавние действия» я увидел, что вы просили меня предоставить пример кода. Я провел лишь незначительное тестирование (похоже, не могу заставить ваш код встроить PDF-файл в IE, по-видимому, для этого требуется плагин PDF, который у меня не установлен), поэтому это может не сработать. Но это только начало.

<div style = "text-align: center; padding-top: 50px;">
    <div id = "doc" style = "width: 384px; height: 512px; position: relative;">
        <div id = "overlay" style = "position: absolute; top: -5px; left: -5px;
            padding: 5px; width: 100%; height: 100%; background: red;
            opacity: 0.5; z-index: 1; display: none;"></div>
        <iframe id = "docFrame" style = "width: 100%; height: 100%; position: relative; z-index: 0;"
            src='http://www.ready.gov/america/_downloads/sampleplan.pdf'></iframe>
    </div>
</div>
<div id = "data"></div>
<script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js" type = "text/javascript" charset = "utf-8"></script>
<script src = "http://ajax.googleapis.com/ajax/libs/jqueryui/1.5.3/jquery-ui.js" type = "text/javascript" charset = "utf-8"></script>
<script type = "text/javascript">
    $(document).ready(function() {
        var obj = $('#docFrame'), overlay = $('#overlay');
        $('#doc').resizable({
            handles: 'all',
            start: function() {
                overlay.show();
            },
            resize: function(e, ui) {
                $('#data').html(ui.size.width + 'x' + ui.size.height);
                obj.attr({
                    width: ui.size.width,
                    height: ui.size.height
                });
            },
            stop: function(e, ui) {
                overlay.hide();
            }
        });
    });
</script>

Я проверю это. Спасибо. Кроме того, вы можете посмотреть плагин foxit для PDF-файлов. Достойная замена саману без всей сопутствующей ерунды.

user1228 01.02.2009 19:54

var dframe = $("#docFrame");

$(document).ready(function () {
    var b = dframe;
    $("#doc").e({
        b: "all",
        resize: function (c, a) {
            $("#data").html(a.size.width + "x" + a.size.height);
            object.attr({
                width: a.size.width,
                height: a.size.height
            });
        },
        start: function () {
            dframe.hide();
        },
        stop: function () {
            dframe.show();
        }
    });
});

Другие вопросы по теме