টাচস্ক্রিনের জন্য আমি কীভাবে একটি jQuery UI 'ড্রাগগেবল ()' ডিভ ড্রাগেবল করতে পারি?


112

আমার একটি jQuery UI রয়েছে draggable()যা ফায়ারফক্স এবং ক্রোমে কাজ করে। ব্যবহারকারীর ইন্টারফেস ধারণাটি মূলত "পরে পোস্ট করুন" টাইপ আইটেমটি তৈরি করতে ক্লিক করে।

মূলত, আমি ক্লিক করি বা ক্লিক করি div#everything(100% উচ্চ এবং প্রশস্ত) যা ক্লিকগুলির জন্য শ্রবণ করে এবং একটি ইনপুট টেক্সারিয়া প্রদর্শন করে। আপনি পাঠ্য যুক্ত করুন এবং তারপরে আপনি এটি সম্পন্ন করার পরে এটি সংরক্ষণ করে। আপনি এই উপাদানটি প্রায় টেনে আনতে পারেন। এটি সাধারণ ব্রাউজারগুলিতে কাজ করছে, তবে একটি আইপ্যাডে আমি পরীক্ষা করতে পারি যে আমি আইটেমগুলি প্রায় টেনে আনতে পারি না। যদি আমি বাছতে স্পর্শ করি (এটি পরে কিছুটা ধীরে ধীরে) তবে আমি এটিকে টেনে আনতে পারি না। এটি মোটেও বাম বা ডানদিকে টানবে না। আমি করতে নিচে আপ টেনে আনুন বা, কিন্তু আমি পৃথক টেনে করছি না div, আমি পুরো ওয়েবপেজ টেনে করছি।

ক্লিকগুলি ক্যাপচার করার জন্য আমি এখানে কোডটি ব্যবহার করি:

$('#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);
});

এবং এখানে আমি নোটটি "সংরক্ষণ" করতে এবং কোডটি ইনপুট ডিভটিকে কেবল একটি প্রদর্শন ডিভিতে রূপান্তর করতে ব্যবহার করি:

$('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();
    }
});

যখন আমি সংরক্ষিত নোটগুলির জন্য পৃষ্ঠাটি লোড করি তখন আমার এই কোডটি থাকে:

$('.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অবজেক্টটি নোটগুলি সংরক্ষণ করে।

অনলোড, এটি পুরো এইচটিএমএল শরীর:

<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>

সুতরাং, আমার প্রশ্নটি সত্যই: আমি কীভাবে আইপ্যাডে এই কাজটি আরও ভাল করতে পারি?

আমি jQuery UI তে সেট করা নেই, আমি ভাবছি যে এটি আমি যদি jQuery UI, বা jQuery এর সাথে ভুল করছি বা ক্রস-প্ল্যাটফর্ম / পশ্চাদপটে সামঞ্জস্যপূর্ণ ড্রাগ্যাগেবল () উপাদানগুলি করার জন্য আরও ভাল ফ্রেমওয়ার্ক থাকতে পারে যা কিনা টাচস্ক্রিন ইউআই এর জন্য কাজ করুন।

এটির মতো ইউআই উপাদানগুলি কীভাবে লিখবেন সে সম্পর্কে আরও সাধারণ মন্তব্যগুলি স্বাগত জানানো হবে।

ধন্যবাদ!


আপডেট: আমি কেবল আমার jQuery ইউআই draggable()কলটিতে এটি চেইন করতে সক্ষম হয়েছি এবং আইপ্যাডে সঠিক ড্রাগগ্যাবিলিটি পেতে পারি!

.touch({
    animate: false,
    sticky: false,
    dragx: true,
    dragy: true,
    rotate: false,
    resort: true,
    scale: false
});

JQuery এর টাচ প্লাগইন কৌতুক করেনি!


1
আমি কিছু সম্পর্কে কৌতূহল করছি: আপনি দুটি বা তিনটি আঙ্গুল দিয়ে ডিভটি প্রায় টেনে আনতে পারেন? আমি জানি যে আপনার মাঝে মাঝে মোবাইল সাফারিতে এম্বেড থাকা সামগ্রীগুলিকে স্ক্রোল করতে একাধিক আঙ্গুল ব্যবহার করতে হয়, তাই এটি "ড্রাগ্যাগেবল" সামগ্রীগুলির জন্য একই হতে পারে।
ওয়াল্টার মুন্ড

ওয়াল্টার মুন্ডকে ধন্যবাদ! আমি আঙ্গুলের কোনও প্রকারভেদ চেষ্টা করি নি, চেষ্টা করব যখন আমি এটি হাতে নেব!
আর্টলুং

1
দুই বা তিনটি আঙুল আসলে "পুরো পৃষ্ঠা "টিকে অজান্তে স্ক্রোলিং থেকে আটকাতে পারে, কিন্তু টেনে নেবার জন্য কোনও পরিবর্তন করেনি।
আর্টলুং

দুর্ভাগ্যক্রমে এই কৌশলটি আমার পক্ষে কাজ করে নি বলে মনে হয়। :(
ব্লাস্টার

@ ব্লাস্টার অন্যান্য সম্ভাব্য সমাধানগুলির জন্য আপনাকে অন্য কয়েকটি উত্তর দেখতে হবে
আর্টল্যাং

উত্তর:


138

অনেক ঘন্টা নষ্ট করার পরে, আমি এই জুড়ে এসেছি!

jQuery-ui এ-টাচ-মুষ্ট্যাঘাত

এটি ট্যাপ ইভেন্টগুলি ক্লিক ইভেন্ট হিসাবে অনুবাদ করে। Jquery পরে স্ক্রিপ্ট লোড মনে রাখবেন।

আমি আইপ্যাড এবং আইফোন এ কাজ পেয়েছিলাম

$('#movable').draggable({containment: "parent"});

2
এই সমাধানটি দুর্দান্ত কাজ করে, আমি ক্লান্ত হয়েছি এমন আরও একটি উত্তর বগি ছিল এবং সত্যিই কোনও সহায়তা করেনি
10-10 এ মিউজফ্যান

একটি ছোট্ট টিপ: দুর্দান্ত কাজ করে, যদিও উপরের মুখোশযুক্ত কোনও চিত্রের মতো স্তরগুলির সাথে আচ্ছাদিত ড্রাগগুলি যদি কোনও টানা সক্রিয় না করা হয় তবে সমাধানটি অ্যাড পয়েন্টার-ইভেন্টগুলি হবে: কিছুই নয়; উপরের স্তর।
অ্যাডলারের

এটি একটি দুর্দান্ত এবং সাধারণ সমাধান, আপনি কেবল প্লাগইনটি ব্যবহার করেন এবং JQuery ড্রাগ্যাগেবল ফাংশনটির সাথে কাজ চালিয়ে যান। পারফেক্ট, ধন্যবাদ!
প্রায় শুরু

এটি ড্রাগেবলের মধ্যে ক্লিকযোগ্য আইটেমগুলি প্রতিরোধ করবে।
আব্দুল সাদিক ইয়ালসিন

61

সাবধানতা: এই উত্তরটি 2010 সালে লেখা হয়েছিল এবং প্রযুক্তি দ্রুত চলে moves আরও সাম্প্রতিক সমাধানের জন্য, নীচে @ ctrl-alt-dileep এর উত্তর দেখুন


আপনার প্রয়োজনের উপর নির্ভর করে আপনি jQuery টাচ প্লাগইন চেষ্টা করতে পারেন ; আপনি এখানে একটি উদাহরণ চেষ্টা করতে পারেন । এটি আমার আইফোনে টেনে আনতে সূক্ষ্ম কাজ করে, যেখানে jQuery ইউআই ড্রাগগ্যাগেবল হয় না।

বিকল্পভাবে, আপনি এই প্লাগইনটি চেষ্টা করতে পারেন , যদিও এটির জন্য আপনাকে সম্ভবত নিজের ড্রাগগ্রেবল ফাংশন লিখতে হবে।

সিডনোট হিসাবে: বিশ্বাস করুন বা না করুন, আমরা কীভাবে আইপ্যাড এবং আইফোনের মতো স্পর্শ ডিভাইসগুলি ওয়েবসাইটগুলির জন্য উভয়ই সমস্যার কারণ হয়ে উঠছে তা নিয়ে বাড়তি গুঞ্জন শুনতে পাচ্ছি: হোভার / অনমুহইভার ফাংশন এবং ড্রাগগ্রেবল সামগ্রী।

আপনি যদি এর জন্য অন্তর্নিহিত সমাধানটিতে আগ্রহী হন তবে এটি তিনটি নতুন জাভাস্ক্রিপ্ট ইভেন্ট ব্যবহার করা উচিত; ontouchstart, ontouchmove এবং ontouchend। অ্যাপল আসলে তাদের ব্যবহার সম্পর্কে একটি নিবন্ধ লিখেছিল, যা আপনি এখানে খুঁজে পেতে পারেন । সরলীকৃত উদাহরণ এখানে পাওয়া যাবে । এই ইভেন্টগুলি আমি যে প্লাগইন থেকে লিঙ্ক করেছি উভয়ই ব্যবহৃত হয়।


2
দুর্দান্ত দুর্দান্ত! আমাকে যা করতে হয়েছিল তা হ'ল .touch({ animate: false, sticky: false, dragx: true, dragy: true, rotate: false, resort: true, scale: false });আমার বিদ্যমান draggable()কলটিতে চেইন করা এবং এটি একটি ট্রিট কাজ করে! ওয়ার্কফ্লোটি ঠিক পেতে আমি যে সকল ইভেন্টগুলির সাথে ডিল করতে চাইছি তার সবগুলি এখনও কাজ করতে হবে, তবে jQuery টাচ প্লাগইনটি কৌশলটি করেছে!
আর্টলুং

4
প্লাগইন আর jquery.com এ উপলব্ধ বলে মনে হচ্ছে না। আপনি এখনও জাভাস্ক্রিপ্ট এখানে সন্ধান করতে পারেন manifestinteractive.com/iphone/touch/js/jquery.touch.js
bjlli

1
হেই, এখন প্লাগইনটিও ম্যানিফেস্টইনেক্টিভ ডট কম থেকে অনুপস্থিত। এটি চেষ্টা করুন: plugins.jquery.com/files/jquery.touch.js.txt
ইয়ান হান্টার

5
এই উত্তর আর বৈধ নয়। দেখতে @ একটি 2012 উত্তরের জন্য নিচের (jQuery-ui এ-টাচ-মুষ্ট্যাঘাত) Ctrl-Alt-দিলীপ এর উত্তর
bjelli

1
@ বেজেলি এটি দেখানোর জন্য ধন্যবাদ। আমি আমার উত্তরটি একটি সতর্কবার্তা দিয়ে আপডেট করেছি। :)
ভনকনরেড

24

এই প্রকল্পটি সহায়ক হওয়া উচিত - মানচিত্রগুলি এমনভাবে ইভেন্টগুলিতে ক্লিক করতে ইভেন্টগুলিকে স্পর্শ করে যাতে কোনও পরিবর্তন ছাড়াই jQuery UI আইপ্যাড এবং আইফোনে কাজ করতে দেয়। যে কোনও বিদ্যমান প্রকল্পে কেবল জেএস যুক্ত করুন।

http://code.google.com/p/jquery-ui-for-ipad-and-iphone/


7

jQuery ui 1.9 আপনার জন্য এটি যত্ন নিতে চলেছে। পূর্বের একটি ডেমো:

https://dl.dropbox.com/u/3872624/lab/touch/index.html

কেবল jquery.mouse.ui.js কে ধরে ফেলুন, আপনি যে jQuery ইউআই ফাইলটি লোড করছেন তার নীচে এটি আটকে দিন এবং আপনাকে যা করতে হবে তা হ'ল! বাছাইযোগ্য হিসাবে কাজ করে।

এই কোডটি আমার পক্ষে দুর্দান্ত কাজ করছে, তবে যদি আপনার ত্রুটিগুলি পাওয়া যায় তবে jquery.mouse.ui.js এর একটি আপডেট সংস্করণ এখানে পাওয়া যাবে:

জ্যাকুই-ইউআই বাছাইযোগ্য অ্যান্ড্রয়েড বা আইওএসের ভিত্তিতে টাচ ডিভাইসে কাজ করে না


3
এটি দুর্দান্ত যে তারা এই 1.9 নিয়ে কাজ করছে। এফডাব্লুআইডাব্লু, আমি কোডটির সংস্করণটি দেখতে পেয়েছি যে ডেমোতে এটিতে বাগ রয়েছে এবং এটি খুব ভালভাবে কাজ করে না। কেউ এই প্রশ্নের আরও সঠিক সংস্করণ পোস্ট করেছেন: স্ট্যাকওভারফ্লো / প্রশ্ন / 6745098/… এটি আমার পক্ষে আরও ভাল কাজ করছে।
asgeo1

আমি এই উত্তর আমার উত্তর আপডেট। আসলটির সাথে আমার ব্যবহারের ক্ষেত্রে আমি এখনও কোনও ত্রুটি অর্জন করতে পারি নি।
thatmiddleway

1
ড্রপবক্সের লিঙ্কটি নিচে রয়েছে।
বার্গগ্রিনডিকে


2

আমি গতকাল একই ধরণের সমস্যার সাথে লড়াই করে যাচ্ছিলাম। আমার কাছে ইতিমধ্যে jQuery UI এর ড্রাগগ্যাবল ব্যবহার করে jQuery টাচ পাঞ্চের সাথে একটি "ওয়ার্কিং" সলিউশন ছিল, যা অন্যান্য উত্তরে উল্লিখিত হয়েছে। যাইহোক, এই পদ্ধতিটি ব্যবহার করা আমার জন্য কিছু অ্যান্ড্রয়েড ডিভাইসে অদ্ভুত বাগ তৈরি করছিল এবং তাই আমি একটি ছোট জিকুয়ের প্লাগইন লেখার সিদ্ধান্ত নিয়েছি যা এইচটিএমএল উপাদানগুলিকে জাল মাউসের ইভেন্টগুলি অনুকরণকারী কোনও পদ্ধতি ব্যবহারের পরিবর্তে স্পর্শ ইভেন্টগুলি ব্যবহার করে টেনে নিতে সক্ষম করে তুলতে পারে।

এর ফলস্বরূপ jQuery ড্র্যাগেবল স্পর্শ যা উপাদানগুলিকে টেনে আনতে সক্ষম করার জন্য একটি সহজ jQuery প্লাগইন, এতে টাচ ডিভাইস রয়েছে যা স্পর্শ ইভেন্টগুলি (যেমন টাচস্টার্ট, টাচমোভ, টাচেনড ইত্যাদি) ব্যবহার করে এটির প্রধান লক্ষ্য। এটিতে এখনও একটি ফ্যালব্যাক রয়েছে যা মাউস ইভেন্টগুলি ব্যবহার করে যদি ব্রাউজার / ডিভাইস স্পর্শ ইভেন্টগুলিকে সমর্থন করে না।


হাই হেইমন, এটি দুর্দান্ত কাজ। এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ। এটি কি jQuery আকার পরিবর্তন করতে পারে?
হারিস

1

আপনি jquery.pep.js ব্যবহার করে দেখতে পারেন :

jquery.pep.js একটি লাইটওয়েট jQuery প্লাগইন যা কোনও ডিওএম উপাদানকে টেনে আনেযোগ্য বস্তুতে পরিণত করে। এটি স্পর্শ থেকে ক্লিক করতে পুরানো থেকে নতুন পর্যন্ত সমস্ত ব্রাউজার জুড়ে কাজ করে। আমি এটি এমন একটি প্রয়োজন পূরণের জন্য তৈরি করেছি যাতে jQuery UI- এর ড্রাগিগটি পূরণ হচ্ছে না, যেহেতু এটি স্পর্শ ডিভাইসে (কিছু হ্যাকারি ছাড়াই) কাজ করে না।

ওয়েবসাইট , গিটহাব লিঙ্ক


1
ধন্যবাদ @ মার্টিনাস, আমি এটি পরীক্ষা করে দেখব!
আর্টলং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.