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.
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.
For number 2, that should be possible, since I have the position of each item in the list (and the position of the list itself. Using a <canvas> might be the way to go.
For number 4, my main concern would be that it would feel like "scroll-hijacking". What I did however is prevent the picked item from going beyond the list, in both directions.
Number 5 is a good idea as well, easy to implement.
I think you should add some kind of marker to show where the item was picked up from and thus what would happen if the operation was cancelled, and an empty slot is perfect for that.
I would suggest having the place button next to/in the item being dragged like Pick. When learning to use this, having it at a distance creates unnecessary cognitive burden.
Also, I would probably make the entire item clickable for pick, if there didn’t have to be a click target on the item for other functionality.
It'd be good if when you picked something it automatically added the border too - otherwise I think this won't work on short pages?
I have some hesitations though - relying on scroll as the positioning method means that if you don't have a fine-grained scroll method e.g. on desktop, if you have a non-continuous wheel, you'll need to rely on "drag and dropping" the scroll bar, which doesn't really improve things (and has its own issues if your page is very long).
I think I'd prefer something other than scroll-to-position. Like what about making gaps between items with a "drop" button? Or adding up/down arrow buttons to the "picked" element so that fine grained adjustments could be done?
> 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.
Strong disagree here. It is intuitive, it is easy to demonstrate. But it's not really convenient, especially on a trackpad. I have enough mouse agility to play RTS games but not to do a reliable drag-and-drop, especially in a complicated case - across windows, with scroll, etc.
I would like a desktop pick and place that works like drag and drop, you click and then it sticks to the cursor, but you are free to do whatever gestures until you click again.
I'm not sure if this is common on other desktop operating systems but the 'Drag Lock' feature on macOS allows you to double-tap an item, then drag it without holding the button down to begin a drag. At that point lifting your finger continues the drag until you tap once to release it.
I would be amazed at how many people using macOS have never found this option except I'm not sure I've ever seen it being called out as a feature, and nowadays it's also buried deep under Accessibility settings (the irony) instead of just being a Trackpad option, so a lot of users might not even think to go there.
I’d argue that double-click to open a file is also not intuitive, but it is now the expected behaviour. Documents don’t have to be touched twice in real life to have them open and reveal their secrets. Plus, I do use Drag Lock, so that behaviour now does feel intuitive to me.
There’s a lot to be said for what is effectively learned behaviour in intuition.
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.
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.
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.
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.
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.
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.
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
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.
If when in pick mode you would only scroll the list, I would be able to organize it much faster.
Pretty hyperbolic. First of all, this is a human and their work you’re talking about. A little respect goes a long way. Secondly, if this is the worst UX you’ve ever seen on mobile, I have to assume you’ve only been using the internet for the past week or so. This experience worked great for me on mobile Safari with no instructions required. You can’t say that for a lot of mobile UX including, I might add, Safari itself.
Any ideas?
(great idea, though)
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
here's a basic CSS starting point
:has(.pnp-picked) .pnp-item:not(.pnp-picked):not(:last-child)::after {
content: "[place]";
}But, that's on desktop. The scrolling works a lot better on mobile.
(Ironically doesn’t work on mobile)
They feel quite similar but am no UX expert.
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.
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.
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.
- 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
What I’d do is to add a drop shadow and increase scale by 1-3%, with a clean, snappy animation between placed and picked up. I might also add a “gripping hand” graphic with a cursor-like appearance to picked up items and show a “scroll to move” instruction next to the hand graphic if the user hasn’t done anything for a couple of seconds.
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...
Would love to see this work with keyboard only
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.
Not bashing, that's how good ideas are found. But not this time IMO :)
------
Will this work on lists that sre short? It seems that it relies on overflow to move the element
This is much better on mobile and I suspect for accessibility.
Potential bug: The first time I tried it on my iPad, it didn’t place the item, but it did on subsequent uses.
But in any case, great stuff!
- Zoom out after drag start and back in when hovering over items.
- Drag to a staging area/clipboard.
Linked in page is 404.
Their page uses https://jgthms.com/picknplace.js/picknplace.js
you can see that there are different areas of draggable and droppable, on different directions.
Pick: all previous "Pick" buttons become "Place". You choose one.
Done. Simple, explicit, intuitive.
There are clearly a bunch of people who haven't used a new interface in perhapse years and are simply obtuse.
It took me less than 5 seconds to start using this one handed while I was pissing at a urinal, I mean that quite literally.
Definitely see its potential for mobile pages.
On web it feels unintuitive to scroll. It feels more natural to drag and drop. Guess Trello boards have conditioned us.
But on web this control is way better.
thanks for sharing