首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使jQuery UI ' draggable ()‘div可拖拽用于触摸屏?

如何使jQuery UI ' draggable ()‘div可拖拽用于触摸屏?
EN

Stack Overflow用户
提问于 2010-06-12 07:46:50
回答 7查看 102.3K关注 0票数 114

我有一个可以在火狐和Chrome中工作的jQuery UI draggable()。用户界面的概念基本上是点击来创建一个"post-it“类型的项目。

基本上,我点击或点击div#everything (100%高和宽),它会监听点击,然后会显示一个输入文本区。您添加文本,然后当您完成时,它会保存它。您可以拖动此元素。这在普通浏览器上是有效的,但在我可以测试的iPad上,我不能到处拖动项目。如果我触摸选择(然后它会稍微变暗),我就不能拖动它。它根本不会向左或向右拖动。I可以向上或向下拖动,但我不是拖动单个div,而是拖动整个网页。

下面是我用来捕获点击的代码:

代码语言:javascript
复制
$('#everything').bind('click', function(e){
    var elem = document.createElement('DIV');
    STATE.top = e.pageY;
    STATE.left = e.pageX;
    var e = $(elem).css({
        top: STATE.top,
        left: STATE.left
    }).html('<textarea></textarea>')
    .addClass('instance')
    .bind('click', function(event){
        return false;
    });
    $(this).append(e);
});

下面是我用来“保存”注释并将输入div转换为显示div的代码:

代码语言:javascript
复制
$('textarea').live('mouseleave', function(){
    var val = jQuery.trim($(this).val());
    STATE.content = val;
    if (val == '') {
        $(this).parent().remove();
    } else {
        var div  = $(this).parent();
        div.text(val).css({
            height: '30px'
        });
        STATE.height = 30;
        if ( div.width() !== div[0].clientWidth || div.height () !== div[0].clientHeight ) {
            while (div.width() !== div[0].clientWidth || div.height () !== div[0].clientHeight) {
                var h = div.height() + 10;
                STATE.height = h;
                div.css({
                    height: (h) + 'px'
                });     // element just got scrollbars
            }
        }
        STATE.guid = uniqueID()
        div.addClass('savedNote').attr('id', STATE.guid).draggable({
            stop: function() {
                var offset = $(this).offset();
                STATE.guid = $(this).attr('id');
                STATE.top = offset.top;
                STATE.left = offset.left;
                STATE.content = $(this).text();
                STATE.height = $(this).height();
                STATE.save();
            }
        });
        STATE.save();
        $(this).remove();
    }
});

当我为保存的笔记加载页面时,我有以下代码:

代码语言:javascript
复制
$('.savedNote').draggable({
    stop: function() {
        STATE.guid = $(this).attr('id');
        var offset = $(this).offset();
        STATE.top = offset.top;
        STATE.left = offset.left;
        STATE.content = $(this).text();
        STATE.height = $(this).height();
        STATE.save();
    }
});

我的STATE对象负责保存注释。

Onload,这是整个html主体:

代码语言:javascript
复制
<body> 
    <div id="everything"></div> 
<div class="instance savedNote" id="iddd1b0969-c634-8876-75a9-b274ff87186b" style="top:134px;left:715px;height:30px;">Whatever dude</div> 
<div class="instance savedNote" id="id8a129f06-7d0c-3cb3-9212-0f38a8445700" style="top:131px;left:347px;height:30px;">Appointment 11:45am</div> 
<div class="instance savedNote" id="ide92e3d13-afe8-79d7-bc03-818d4c7a471f" style="top:144px;left:65px;height:80px;">What do you think of a board where you can add writing as much as possible?</div> 
<div class="instance savedNote" id="idef7fe420-4c19-cfec-36b6-272f1e9b5df5" style="top:301px;left:534px;height:30px;">This was submitted</div> 
<div class="instance savedNote" id="id93b3b56f-5e23-1bd1-ddc1-9be41f1efb44" style="top:390px;left:217px;height:30px;">Hello world from iPad.</div> 

</body>

所以,我的问题是:我如何才能在iPad上更好地工作?

我不是在draggable UI上设置的,我想知道这是不是我在jQuery UI或jQuery上做错了什么,或者是否有更好的框架来做跨平台/向后兼容的draggable()元素,这些元素可以在触摸屏UI上工作。

更多关于如何编写这样的UI组件的一般性意见也将受到欢迎。

谢谢!

更新:我能够简单地将其链接到我的jQuery UI draggable()调用上,并在iPad上获得正确的可拖放性!

代码语言:javascript
复制
.touch({
    animate: false,
    sticky: false,
    dragx: true,
    dragy: true,
    rotate: false,
    resort: true,
    scale: false
});

jQuery Touch plugin做到了!

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3026915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档