Odağı Elm'deki bir Html öğesine nasıl ayarlayabilirim? Otomatik odaklama özelliğini öğe üzerinde ayarlamaya çalıştım ve yalnızca odağı sayfa yüküne göre ayarlar.Elm'deki bir öğeye odaklama nasıl ayarlanır?
cevap
elm-lang/dom pakette focus
fonksiyonu (herhangi bir port
s veya JavaScript kullanmadan) bir Task
ile odak ayarlamak için kullanılır.
Dahili olarak, hedeflenecek DOM düğümünü bulmaya çalışmadan önce yeni DOM güncellemelerinin oluşturulmasını sağlamak için requestAnimationFrame
'u kullanır.
bir örnek kullanım:
type Msg
= FocusOn String
| FocusResult (Result Dom.Error())
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
FocusOn id ->
(model, Dom.focus id |> Task.attempt FocusResult)
FocusResult result ->
-- handle success or failure here
case result of
Err (Dom.NotFound id) ->
-- unable to find dom 'id'
Ok() ->
-- successfully focus the dom
Son zamanlarda bunu keşfetmek için epey zaman harcadım. Ne yazık ki, mevcut elm-html
kütüphanesi ile mümkün olduğunu düşünmüyorum. Bununla birlikte, bir olayı tetiklemek ve bunu saf js içine gömmek için css animasyonlarını kullanan bir korsanla karşılaştım.
Elm'deki bir kesmek, script
düğümünü ve style
düğümünü kullanıyor. Benim düşüncem çok çirkin. Bunun için
import Html exposing (div, button, text, input, node)
import Html.Events exposing (onClick)
import Html.Attributes exposing (type', class)
import StartApp.Simple
main =
StartApp.Simple.start { model = model, view = view, update = update }
model = []
view address model =
-- View now starts with a <style> and <script> (hacky)
(node "style" [] [ Html.text style ]) ::
(node "script" [] [Html.text script ]) ::
(button [ onClick address AddInput ] [ text "Add Input" ]) ::
model |>
div []
type Action = AddInput
update action model =
case action of
AddInput -> (Html.p [] [input [type' "text", class "focus"] []]) :: model
-- Use pure string css (hacky)
style = """
.focus {
animation-name: set-focus;
animation-duration: 0.001s;
-webkit-animation-name: set-focus;
-webkit-animation-duration: 0.001s;
}
@-webkit-keyframes set-focus {
0% {color: #fff}
}
@keyframes set-focus {
0% {color: #fff}
}
"""
-- Cheating by embedding pure javascript... (hacky)
script = """
var insertListener = function(event){
if (event.animationName == "set-focus") {
event.target.focus();
}
}
document.addEventListener("animationstart", insertListener, false); // standard + firefox
document.addEventListener("MSAnimationStart", insertListener, false); // IE
document.addEventListener("webkitAnimationStart", insertListener, false); // Chrome + Safari
"""
bir geçici çözüm Mutation Observers kullanmaktır. Ana HTML sayfasına veya Elm kodun temel görünümünde ya bu JavaScript ekleyin:
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
handleAutofocus(mutation.addedNodes);
});
});
var target = document.querySelector('body > div');
var config = { childList: true, subtree: true };
observer.observe(target, config);
function handleAutofocus(nodeList) {
for (var i = 0; i < nodeList.length; i++) {
var node = nodeList[i];
if (node instanceof Element && node.hasAttribute('data-autofocus')) {
node.focus();
break;
} else {
handleAutofocus(node.childNodes);
}
}
}
Sonra Html.Attributes.attribute "data-autofocus" ""
dahil ederek HTML öğelerini oluşturmak.
- 1. MVVM kullanarak bir WPF Denetimine Odaklama nasıl ayarlanır?
- 2. DataTemplate'de bir TextBox'ta odaklama
- 3. UITextField odaklama
- 4. Tuval Üzerindeki Bir Sınıra Odaklama
- 5. Bir Görünümde İlk Odaklama Nasıl Belirlenir?
- 6. Windows.h - Odaklama bir metin girdisi girdiğinde bildirim
- 7. ListActivity'de hangi öğeye uzun basıldığına bağlı olarak belirli bir bağlam menüsü nasıl ayarlanır?
- 8. Odaklama Bir Odayla İlgili Olarak ExtendedProperties
- 9. nasıl son EditText odaklama gelen duruyorsun?
- 10. AVCaptureSession'a otomatik odaklama nasıl eklenir? SWIFT
- 11. Robot Çerçevesi'nde bir öğeye nasıl tıklanır? Selenium
- 12. Android'de liste görünümündeki bir öğeye nasıl atlayabilirim?
- 13. CacheMode'u bir öğeye programatik olarak nasıl ayarlarsınız?
- 14. Dart’daki bir öğeye nasıl rasgele HTML ekleyebilirim?
- 15. Prolog - bir öğeye nasıl eleman eklersiniz
- 16. Odaklama (veya sekme) siparişi verin
- 17. NSScrollView (veya NSClipview) odaklama halkası?
- 18. Bileşen üzerindeki 'odaklama' renginin değiştirilmesi
- 19. Odaklama olmadan bir wpf metin kutusundaki metni nasıl vurgulayabilir/seçebilirsiniz?
- 20. Bir öğeye tıklama olayı ekleme?
- 21. Önizleme yapmadan otomatik odaklama kamerası
- 22. UICollectionViewCell to UIButton Odaklama tvOS
- 23. Açısal Rotalar/giriş otomatik odaklama
- 24. jQuery tokenInput eklentisi (ve odaklama)
- 25. TFPGList işaretçisi öğeye nasıl alınır?
- 26. Xamly, klavye odağını DataGridTemplateColumn hücresindeki bir öğeye mi ayarladı?
- 27. Tıklatmadaki bir öğeye bir CSS sınıfı nasıl eklenir - Tepki
- 28. XSL bir öğeye dayalı bir değer doldurmak için nasıl 1.0
- 29. JQuery kullanarak bir model içindeki bir öğeye nasıl kaydırılır?
- 30. C'deki FIFO kuyruğunda bir öğeye nasıl bir kimlik verilir?
Not Bu * * does iş, ama eleman dinamik eklenirse o sessizce beklenmedik zamanlarda başarısız olabilir bulundu. – AdrianoFerrari
Bunun başarısız olduğu bir örneğiniz var mı? – robertjlooby
Maalesef, şu anda tekrarlanabilir bir örneğim yok. Başka bir tane bulursam gönderirim. Genel olarak, bu kesinlikle bunu yapmak için doğru bir yoldur, bu yüzden belirli bir durum bulana kadar yorumumun göz ardı edilmesi gerekir :) – AdrianoFerrari