Раскрытие информации: я написал код, который использует Trello; приведенный ниже код является фактическим исходным кодом, который Trello использует для выполнения трюка с буфером обмена.
На самом деле мы не получаем доступ к буферу обмена пользователя, вместо этого мы немного помогаем пользователю, выбирая что-то полезное, когда он нажимает Ctrl + C.
Похоже, вы уже догадались; мы пользуемся тем фактом, что когда вы хотите нажать Ctrl + C, вы должны сначала нажать клавишу Ctrl. Когда нажата клавиша Ctrl, мы вставляем текстовое поле, содержащее текст, который мы хотим поместить в буфер обмена, и выделяем весь текст в нем, поэтому выделение устанавливается, когда Нажата клавиша C. (Затем мы скрываем текстовое поле, когда появляется клавиша Ctrl.)
В частности, Trello делает это:
TrelloClipboard = new class
constructor: ->
@value = ""
$(document).keydown (e) =>
# Only do this if there's something to be put on the clipboard, and it
# looks like they're starting a copy shortcut
if !@value || !(e.ctrlKey || e.metaKey)
return
if $(e.target).is("input:visible,textarea:visible")
return
# Abort if it looks like they've selected some text (maybe they're trying
# to copy out a bit of the description or something)
if window.getSelection?()?.toString()
return
if document.selection?.createRange().text
return
_.defer =>
$clipboardContainer = $("#clipboard-container")
$clipboardContainer.empty().show()
$("<textarea id='clipboard'></textarea>")
.val(@value)
.appendTo($clipboardContainer)
.focus()
.select()
$(document).keyup (e) ->
if $(e.target).is("#clipboard")
$("#clipboard-container").empty().hide()
set: (@value) ->
В DOM у нас есть:
<div id="clipboard-container"><textarea id="clipboard"></textarea></div>
CSS для буфера обмена:
#clipboard-container {
position: fixed;
left: 0px;
top: 0px;
width: 0px;
height: 0px;
z-index: 100;
display: none;
opacity: 0;
}
#clipboard {
width: 1px;
height: 1px;
padding: 0px;
}
... и CSS делает так, что вы фактически не можете видеть текстовое поле, когда оно появляется ... но его достаточно для копирования.
Когда вы наводите курсор на карту, она вызывает
TrelloClipboard.set(cardUrl)
... так что тогда помощник буфера обмена знает, что выбрать при нажатии клавиши Ctrl.
person
Daniel LeCheminant
schedule
08.07.2013