logoalt Hacker News

Show HN: Picknplace.js, an alternative to drag-and-drop

416 pointsby bbxlast Tuesday at 4:12 PM143 commentsview on HN

I find that the drag and drop experience can quickly become a nightmare, especially on mobile. To tap, hold, drag, and scroll, all at the same time, is both difficult to achieve, and prone to errors. I've always had in mind this 2-step approach, where picking an element and placing it were two separate steps. So I implemented this basic version to showcase my idea.

While it might take more time than a regular drag and drop, the benefit is for people who struggle with holding down the mouse button. With picknplace.js, you only need two clicks and some scrolling.

This solution is meant as an experiment, so I'm open to discussion.


Comments

thunderbongtoday at 2:26 AM

Brilliant! Its been a while since I've seen a brand new UX patten.

As some others have mentioned, the picked state needs to be a bit more clear.

Some suggestions -

1. As a border around 'Pick' to indicate it as an action

2. Once an item is picked, add a mask on the whole page, with only the picked item in front of the mask. (This is going to be a bit challenging, I'm guessing, to show the gaps between the items as you scroll)

3. Once an item is picked, the 'Cancel' and 'Place' bar should have a background. Sometimes this overlaps the list and is not clearly visible.

4. It should not be possible to scroll way above or below the list.

5. On 'Cancel' scroll back to the item.

Again, congratulations! It's one thing to think of something, quite another to be able to implement it nicely.

show 3 replies
jotaenlast Tuesday at 9:18 PM

This looks like an interesting concept!

> I find that the drag and drop experience can quickly become a nightmare, especially on mobile.

To me, drag and drop is only a nightmare on mobile. On desktop (using a mouse or trackpad), drag and drop actually works quite well.

Your design experiment reminds me of a recent talk of Scott Jenson, where he talked about how we just took over established UX patterns from desktop to mobile as is, and how that created all sorts of nuisances. (https://youtu.be/1fZTOjd_bOQ?t=1565)

If mobile drag&drop was implemented like you are suggesting from the very start, I actually might have preferred that over the situation we now ended up with.

One technical note on your implementation: on certain mobile browsers, there is a glitch where the UI can jump around as the browser dynamically slides top or bottom menu bars in and out.

show 1 reply
chrismorgantoday at 8:53 AM

This has the effect that you’re shifting the list rather than the item. And yet your actual controls are anchored to the item.

On a touch device, to shift an item from the middle of a list to the top:

• With traditional drag-and-drop: press in the middle (long press or regular press on a movement grabby), drag upwards, release.

• With this: tap in the middle, on the item, then press anywhere, drag down, release.

It’s uncomfortable. The logical entity you’re manipulating is the item, but you’re having to do it by interacting with the list, and if your drag starts on the item it’ll achieve the opposite of what you want.

It may also interact a little poorly with retracting browser chrome, which is very common on mobile. I’d definitely say it does on Firefox for Android with top address bar.

As for other platforms… ouch. With a precise touchpad it’s bizarre and uncomfortable but functional (though the scroll direction thing will probably hit even harder and be even more frustrating); with a mouse with indexed scrolling it’s fairly fundamentally unusable.

All up, although it’s an interesting direction to explore, I don’t like it at all at present, and doubt the scrolling aspect can be salvaged. Direct manipulation is good.

show 1 reply
halaprotoday at 3:06 PM

Love it but no one would understand this. I bet most people would just be "stuck" in the "picked" state and not know how to exit it, with an item covering the screen.

Something similar but less obtrusive would be to show "drop here" buttons after you "pick" an item. No sticky element on screen, clear followup action that doesn't require exact scrolling position.

ebiestertoday at 8:22 PM

For a UX pattern, I will often need to move multiple items at the same time. I'd like an exploration that allows the equivalent of shift-click and command-click for multi-select. And if they're not consecutive, they should be grouped.

Otherwise, it's going to be a very frustrating experience to move a number of things.

digitaltreestoday at 6:45 AM

I did not like this as is and found it confusing, but think it has potential and with a few adjustments could be great. I am sure you might have been planning them, and so congratulations on getting something out for comment rather than over building.

1. It will be more intuitive if you can long press or click on the item rather than have to click the "pick" link. That behavior is too deeply ingrained from drag and drop at this point.

2. It would help to show place locations where it will be inserted between objects. I found myself instinctively scrolling up and down to line it up perfectly because it just didnt feel likely to succeed if it wasnt properly placed in the middle, and the absence of visual cues make it seem like I needed to me more accurate with my placement.

Overall cool concept and good work. Keep it up.

ericskifftoday at 2:51 PM

Awesome to see real UX experimentation, and this elicited a strong response from me at first "oh I haaaaate that".

On further reflection, this is very interesting and I understand where the drag and drop interaction breaks down on long lists. Some additional UI affordances to communicate what's happening may make it intuitive and clear.

Things I'd want to experiment with if I was implementing this:

* A "wheel" effect where the items in the list grow slightly as they near the chosen item which stays locked in the interface at the center, popping into place at at each 'click'. Somewhat like the Price Is Right wheel flipper

* Making the interaction entirely scroll based once I click. Setting the item in place can be done by any other click or keypress, and cancelled with the escape hotkey. My interaction is pick, scroll, click (without having to aim back at the thing I just placed by scrolling)

callumgaretoday at 7:39 PM

Very cool! If you’re looking for an example of this UI to compare how others have implemented it take a look at the move function in the mobile app for https://anytype.io

I’ve recorded an example of it in use: https://youtube.com/shorts/T3_8HIbHlls

Sn0wCodertoday at 1:03 AM

Great work building something and having the courage to show HN ;-)

Interesting design. Even though I read the instructions still could not get it to work for 30 or so seconds. Might want to show some text 'Now Scroll' with up/down arrows to the left or right of the list.

Seems ok when the list is in the middle of the page and you already have room to scroll up and down, but how is it going to work when the list is at the top or bottom of the page?

Or when the page is so short it does not scroll at all? I suppose you could have the container scroll but then it needs to be considerable larger than the list.

Honestly when you click 'Pick' all of the others should say 'Place' would be more intuitive and give the user options to support both. As they use it they will pick up they can scroll if they want.

fitsumbelaytoday at 8:01 PM

Made this week's Javascript Weekly https://javascriptweekly.com/issues/766

bramhaaglast Tuesday at 4:41 PM

On mobile this is a strong contender for the worst UX I've ever seen. The whole page moves, so you have to continously scroll back up after placing something.

If when in pick mode you would only scroll the list, I would be able to organize it much faster.

show 5 replies
killerstormtoday at 12:26 AM

Nice. I actually did something similar 25 years ago, I called by think "pick-and-put".

At that time I switched from MS-DOS environment to Windows 98. And as I was trying new UI features, I found drag-and-drop incredibly annoying. Especially if you do it between different windows, it requires a lot of movements, etc.

I had an idea that going further into skeuomorphism can make things better, so I started experimenting with 3D UI, particularly, a file manager with 3D UI. And as an alternative to drag-and-drop I designed pick-and-put.

It's actually very simple: right mouse button picks up an object and you get a symbol of that object next to the cursor. Then a click onto empty space puts it there. Or you can click a copy button which would copy it, etc.

I think it could work really well if we got a convention that some mouse button always picks an object. But we don't.

I don't think there's a way to make it works in the same way on desktop and mobile in a way which would be good. On desktop you have a mouse pointer, and you can easily represent point of insertion.

For mobile you came up with this scroll trick, but I think many people would find it unintuitive and annoying - especially on desktop.

elgertamtoday at 3:36 PM

It's interesting and you should keep iterating. My critiques: it requires a scroll container with sufficient margin to move the top and bottom elements (or I guess left and right) past center; the "place" button is quite unintuitive and should be placed nearer to the pick-n-place container, or even on the selected element itself; and the position of the selected element isn't quite right, though this seems more like a bug.

Keep iterating! Drag-n-drop is good on desktop, but I disprefer it for mobile.

topaz0yesterday at 9:16 PM

Does not work with an indexed scrollwheel -- one click of the scroll wheel moves like 4 lines in your list, which seems to break the assumptions of your code. I get very strange behaviors, e.g. "pick" Five, scroll up and down, see swapping of Ten and Six during scroll. Then "place" results in Five being in the same place as before but Nine and Ten are swapped. Similar when using arrow keys.

show 2 replies
cyrusradfartoday at 5:44 PM

Sharing some feedback and some broader context.

I think it's said in other words elsewhere but the "picked" state needs to be clearer that it's picked up. What may be helpful is to actually add a drop shadow/scale/border and ideally there should be a hole where it was that makes it clear that you are holding it.

Not trying to diminish, but this pattern has other uses already. Anyone who builds accessibly for folks who use keyboard and no mouse.

Tab/arrows to highlight, Enter to select, Arrows to move, Enter to drop.

progxtoday at 11:57 AM

One HUGE problem, what if you set you wheel to scroll faster in the browser? Currently your example scroll always 3 items, i can't move only 1 down or up.

show 1 reply
stephenlftoday at 3:52 AM

This is awesome. I wonder how it would feel if just the selections scrolled, like Apple’s interface for setting alarms and timers.

I especially love it because it leaves open the possibility of interacting with the rest of the screen while an element is picked. Eg you could navigate a directory tree while finding the right place to put a file. Though I guess it’s similar to cut/paste in that respect.

px1999today at 7:40 AM

This is really nice and a very original take. It feels good on mobile / other touch devices.

I'd love to see it feel a bit more polished on desktop (maybe I'll give that a shot if I find a bit of spare time!) - I could see a few simple things like adding up/down arrows to the picked item and wiring into up and down arrow presses going a long way to making it work really well there too.

Genuinely, thank you for sharing this, it's something different and interesting.

css_apologistyesterday at 9:15 PM

i was expecting when i click pick, that a "place" button would appear on each other item, or i could click on a row

OR possibly highlighting the spots between rows either with a line, or "place"

i think that's a much more intuitive & reliable ui, and would be an improvement on drag n drop. or a supplement to it

show 2 replies
lylejantzi3rdyesterday at 10:33 PM

It's interesting. I was expecting the bar to follow the cursor as you move it and clicking a second time would place it wherever it was.

But, that's on desktop. The scrolling works a lot better on mobile.

bangaladorelast Tuesday at 6:09 PM

Given I need to read the instructions to understand how to use this, It's a no go for me. I clicked it and I thought there was a bug because I could only place on the element I clicked.

show 1 reply
codeptualizeyesterday at 9:15 PM

That's neat. Not sure if I would deploy it, as it will be hard to explain/teach people how to use it (as I see in other comments already), but I do see the value in it.

It solves the "drag and drop beyond what fits the screen" much better than you can with drag and drop, the awkward auto-scroll-on-nearing-the-edge-thing.

I would say, if you need to reorder many items, it gets a bit disorienting, the whole list moves as it's anchored to the item you are moving. Maybe there is a way to combine drag and drop where this kicks in if you go beyond the bounds of the visible area.

Also don't think this can work well with multiple axis/drop zones.

show 1 reply
jon_richardstoday at 3:55 AM

But how are you going to replace the OG? https://mrcoles.com/dragondrop/

(Ironically doesn’t work on mobile)

show 1 reply
CGamesPlaytoday at 2:08 AM

OK, so I get that you're trying an alternative on the metaphor that drag and drop uses. The metaphor is "pick up the item, move it, then drop it", but the implementation doesn't work well on mobile, so you made it modal. But for me scrolling feels like "pick up the item, move the rest of the world so the item above the target, then drop it". It feels very strange.

As an refinement, I would keep the modality but add back in the dragging paradigm. Use a typical "move item" scrubber control, but have that control switch the item to a floating modality, and give it "send back" and "drop here" buttons. The user can drag the item, scroll, interact with the page, and the item stays with them to get where they want to go. Here is a crude mockup: https://excalidraw.com/#json=9DwYqkWRhdEgEEqyzY7X8,fCdPzIzTm...

Parmacoytoday at 11:41 AM

Hey @bbx,

Appreciate the different approach to this user experience. I can certainly see it being a more user friendly way where pick and place and explicit actions, versus an accidental finger release on touch devices for example.

I think this has potential for accessibility, just at the moment your demo page has issues in certain cases.

(Different behaviour experienced on iOS 26.2 Safari vs commonly used WebView containers and/or websites masquerading as apps.

If you test the following (edge) cases in a webview. 1. Pick item One, try and move it down. You will find item Two goes along for the ride, and when you drop it, item One stays at the top and item Two is dropped instead. 2. No matter what I tried in the webview, I was unable to purposefully move an item to First or Last position.

Weirdly this doesn’t occur for me in dedicated safari.

I have looked at drag and drop libraries for use on mobile and feel your approach has the potential to be more intuitive, especially for the use cases I have.

Thanks for sharing a new approach.

layer8today at 7:26 PM

That’s how “Choose on map” works on Google Maps on touch devices.

hnlmorgtoday at 7:34 AM

I really don’t like this. It took me several attempts to figure out what was going on.

And even after I had finally figured it out, it still felt more like a rendering glitch than good UX.

If I struggled then I really can’t see this working for non-technical folk.

Worse yet, because people wouldn’t expect this behaviour coupled with the fact that scrolling shouldn’t have any changes to the website state, you’ll likely see people constantly making accidental changes to the ordering of the list.

oakwhiztoday at 2:50 PM

To me the problem with drag and drop is not only that it has to be a single continuous motion, but that nothing else interrupts you at an inconvenient time while you are doing it. The consequences of an incorrect drag and drop can be confusing. This "pick and place" UI is more precise and less error prone but a lot less convenient. Maybe there is a middle ground.

toobulkehtoday at 6:20 PM

What if picking took the item out to the side in a specific place. Like a little basket or drawer

yojotoday at 3:14 AM

This reminds me of a UI pattern I saw in an old iOS comic reader (Comic Zeal) for organizing your comics. You had a horizontal rule that worked as a cursor. You could swipe things to the side (“pick”) to add them to the cursor. You then moved the cursor to the desired location and tapped it to dump the contents (“place”).

My biggest problem with the OP implementation is the “place” button can be far from the “pick” button. Why not just leave it on the moving element - change the label from “pick” to “place” and call it a day.

untechyesterday at 10:46 PM

It’s good, I like it. I think that it might become easier to use if:

- The whole item is clickable for the pick

- Picked state is indicated clearly, possibly by hovering the item

- You click on the item itself to place, or possibly anywhere on the screen

show 1 reply
mwillistoday at 4:35 AM

The “place” aspect of the process needs some refinement. On iOS, it triggers the page bump (and necessitates and extra click) because it’s aligned at the bottom of the page. Having the “place” action hover near the selected object could be an alternative. I really enjoy this pattern. Nice work.

show 1 reply
XCSmetoday at 4:46 PM

Awesome!

Is it actually working well? Not really, at least not at this stage. But it's cool to see a new UX idea.

Mikhail_Edoshintoday at 6:39 AM

Apple Newton had a way to drag/copy things around, a visual clipboard of sorts. They used a stilus, so it's similar. You drag an object to a side of the screen, where it turns into a visible but small handle and stucks. I think it could stay there any time and you could have several objects arranged this way. Then you can go anyplace, including a different application. Once you're in the right place, you could drag an object back and put it where you wanted to put it.

show 1 reply
fbn79today at 11:25 AM

With my mouse gear scroll is impossible to select the desired position. It jump always 2 steps.

show 1 reply
kejyesterday at 9:48 PM

I could see this being really useful for editing lists that are longer than the page. The example that immediately comes to mind is reordering a playlist on YouTube Music, which currently requires dragging to near the screen edge and trying to convince the list to scroll while you still hold on to the item you're trying to move.

show 1 reply
grimgrintoday at 12:14 PM

only slightly similar, on desktop when making a visual selection, dragging cursor from x,y to another x,y then releasing? i'll run into problems with early releases sometimes, could be hardware, network, whatever

if the tool i'm using has this option, i will use it and love it:

    -D, --nodrag
      Allows you to click twice to indicate a selection,
      rather than click-dragging.
that's from maim, idk what else does it, but i prefer "nodrag" to "drag-and-drop" or "drag-and-release"

picknplace reminded me of it

theF00ltoday at 10:59 AM

Awesome! How do you think this compares to the pattern in iOS (and I think Android) where you hold an app icon and the rest start jiggling and then you can tap a folder to move it there (or also drag it).

They feel quite similar but am no UX expert.

stevenhubertronyesterday at 10:44 PM

The amount of time it took me to figure out how to use this I am embarrassed to say was too long.

show 1 reply
will_walkertoday at 12:06 AM

As a ux designer, I like this, especially as it solves the problem of dragging mobile elements below the fold or off the visible screen view.

One suggestion I'd love to try out- let the user select multiple elements at once, and reorder the selected elements in the hovering state using conventional drag and drop mechanics. This might add complexity or might be a much more convenient way to deal with lists!

Or, dragging the element selected should allow a user to manually ‘place’ the item on screen.

I wouldn’t use this on desktop, though! Mice typically allow you to scroll and drag pretty easily.

fitsumbelaytoday at 3:52 AM

I'm old enough to remember when using a mouse felt like being unchained. I also remember how quickly dragging began to feel like a time waste, even more so after spending more time on CLIs than GUIs. So though this seems limited to vertically arranged DOM things it's very cool for eliminating the least productive/most frustrating stage of drag-drop interactions

Would love to see this work with keyboard only

busfahrertoday at 12:00 PM

Slightly off-topic, but I'd love for someone to invent mouse hover that works on mobile, without any hardware support like detecting finger hovering or the likes.

Any ideas?

Timwitoday at 1:19 AM

When I had to implement a UI for reordering a list, I just had a “move” button on each item, and when you press it “move here” buttons would appear between every item (and at the top and bottom). These buttons are positioned absolutely, so there is no reflow from stretching the list. The location where you ‘place’ the item is where you click, not dependent on scroll position. Without even planning for use on mobile it ended up “just working” on mobile because you only need to tap buttons.

recursiveyesterday at 10:49 PM

How move an item from the top to the bottom? Do you need to add 100% padding to the top and bottom of every list? Most lists can't be scrolled far enough to get the screen coordinates of the top to the bottom.

show 1 reply
paxysyesterday at 9:24 PM

Neat concept, but why scroll the entire page? It just ends up being distracting and confusing. Once you hit "pick" the scroll action should affect just the list and nothing else.

breadchrislast Tuesday at 6:51 PM

wow! I love this solution. I agree on the pain of drag and drop on mobile.

hmokiguesstoday at 2:06 AM

I think you could play with sticky footers, sticky headers, and some active styling indicators like opacity and background plus highlights to let the user know they are in scroll mode. Really fun idea, love this! Wish Apple Music UI for moving songs on playlists had that. Holding my dumb while dragging is suboptimal comparing to click and scroll.

csmantletoday at 12:48 AM

This actually caused a constant switching of attention on mobile. Each time an element is picked up I'll have to look at the bottom toolbar, then the floating element in the center, then back to the bottom to place it, so on and so forth. And the list in the demo is not that long yet.

------

Will this work on lists that sre short? It seems that it relies on overflow to move the element

wild_pointertoday at 3:06 AM

9/10 for originality. 2/10 for usefulness.

Not bashing, that's how good ideas are found. But not this time IMO :)

show 1 reply
hinkleyyesterday at 9:45 PM

It’s been a long time since I’ve said “woah” out loud to something that wasn’t a science video.

This is much better on mobile and I suspect for accessibility.

🔗 View 46 more comments