AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 77031413
Accepted
TarJae
TarJae
Asked: 2023-09-03 15:58:26 +0800 CST2023-09-03 15:58:26 +0800 CST 2023-09-03 15:58:26 +0800 CST

Como tornar um item orderInput redimensionável com jqui_resizable

  • 772

Atualização: Aqui está uma explicação gráfica do que eu quero: Existem recursos: 1. redimensionar com o mouse e 2. girar o texto.

insira a descrição da imagem aqui Esta é uma pergunta complementar a este arrastar e soltar com brilhantejqui para uma tabela de grade .

Primeira resposta: estou tentando tornar o item ou botão com o rótulo A redimensionável, como explicado aqui https://yang-tang.github.io/shinyjqui/ : 'Redimensionável: altere o tamanho de um elemento usando o mouse.'

Isso é possível? Tentei a função genérica do pacote jqui_sortablee também um código JS customizado como no exemplo abaixo:

library(shiny)
library(shinyjqui)

connections <- paste0("droppable_cell_", 1) # id of the grid cells

ui <- fluidPage(
  tags$head(
    tags$script(
      JS(
        "
$(document).on('shiny:connected', function() {
$('#letters').resizable({
alsoResize: '.shinyjqui-sortable-item',
minHeight: 20,
minWidth: 20
});
});


$(function() {
$('[id^=droppable_cell]').sortable({
connectWith: '#letters',
drop: function(event, ui) {
$(this).append(ui.draggable);
}
})
});
"
      )
    ),
# some styling
tags$style(
  HTML(
    "
.grid-table {
width: 150px;
border-collapse: collapse;
}
.grid-cell {
width: 100%;
height: 200px;
border: 1px solid black;
background-color: white;
text-align: center;
margin: 0;
padding: 5px;
}
.grid-cell-text {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
background-color: steelblue;
color: white;
font-size: 18px;
}
.droppable-cell {
background-color: lightgray;
}
.table-container {
display: flex;
position: absolute;
left: 10px;
top: 10px;
margin-top: 0px;
overflow: hidden;
}
"
  )
)
  ),

div(
  class = "table-container",
  div(
    class = "grid-table",
    id = "my_grid",
    div(
      class = "grid-row",
      div(class = "grid-cell grid-cell-text", "my_grid"),
      div(id = "droppable_cell_1", class = "grid-cell droppable-cell", ""),
    )
  ),
  
  orderInput('letters', 'Letters', items = LETTERS[1],
             connect = connections) # defined above
)
)

server <- function(input, output, session) {
  
}

shinyApp(ui, server)
  • 1 1 respostas
  • 38 Views

1 respostas

  • Voted
  1. Best Answer
    Jan
    2023-09-04T02:49:36+08:002023-09-04T02:49:36+08:00

    Aqui está uma abordagem para implementar os dois recursos.

    Para os botões redimensionáveis, o seu JSjá é bom, mas você deve aplicá-lo em .btn, não em #letters.

    Os botões girados podem ser obtidos por

    $('.btn').on('resize', function() {
        $(this).css({'transform': 'rotate(270deg)',
                     'line-height': $(this).height().toString() + 'px'});
    })
    

    Isto terá os seguintes efeitos:

    1. Se um botão for redimensionado (é claro que você pode excluir ou alterar esse gatilho), o botão será girado 270 graus. Observe que o mais desejável é girar apenas o texto do botão, não o botão em si, mas acho que é preciso manipular mais HTMLa fundo para conseguir isso. Observe também que writing-mode: sideways-rlé adequado para isso, mas infelizmente atualmente não é compatível com todos os navegadores.

    2. Como os botões possuem text-align: centere vertical-align: middlepor padrão, line-height: $(this).height().toString() + 'px'é suficiente para configurar que o texto do botão (aqui: "A") sempre será exibido no centro do botão após o redimensionamento.

    É assim que ficaria após o redimensionamento:

    insira a descrição da imagem aqui

    library(shiny)
    library(shinyjqui)
    
    connections <- paste0("droppable_cell_", 1) # id of the grid cells
    
    ui <- fluidPage(
        tags$head(
            tags$script(
                JS(
                    "
    $(document).on('shiny:connected', function() {
        $('.btn').resizable({
            alsoResize: '.shinyjqui-sortable-item',
            minHeight: 20,
            minWidth: 20
    });
    
    $('.btn').on('resize', function() {
        $(this).css({'transform': 'rotate(270deg)',
                     'line-height': $(this).height().toString() + 'px'});
    })
    });
    
    
    $(function() {
    $('[id^=droppable_cell]').sortable({
    connectWith: '#letters',
    drop: function(event, ui) {
    $(this).append(ui.draggable);
    }
    })
    });
    "
                )
            ),
            # some styling
            tags$style(
                HTML(
                    "
    .grid-table {
    width: 150px;
    border-collapse: collapse;
    }
    .grid-cell {
    width: 100%;
    height: 200px;
    border: 1px solid black;
    background-color: white;
    text-align: center;
    margin: 0;
    padding: 5px;
    }
    .grid-cell-text {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
    background-color: steelblue;
    color: white;
    font-size: 18px;
    }
    .droppable-cell {
    background-color: lightgray;
    }
    .table-container {
    display: flex;
    position: absolute;
    left: 10px;
    top: 10px;
    margin-top: 0px;
    overflow: hidden;
    }
    "
                )
            )
        ),
        
        div(
            class = "table-container",
            div(
                class = "grid-table",
                id = "my_grid",
                div(
                    class = "grid-row",
                    div(class = "grid-cell grid-cell-text", "my_grid"),
                    div(id = "droppable_cell_1", class = "grid-cell droppable-cell", ""),
                )
            ),
            
            orderInput('letters', 'Letters', items = LETTERS[1],
                       connect = connections) # defined above
        )
    )
    
    server <- function(input, output, session) {
        
    }
    
    shinyApp(ui, server)
    
    • 1

relate perguntas

  • Adicionar número de série para atividade de cópia ao blob

  • A fonte dinâmica do empacotador duplica artefatos

  • Selecione linhas por grupo com 1s consecutivos

  • Lista de chamada de API de gráfico subscritoSkus estados Privilégios insuficientes enquanto os privilégios são concedidos

  • Função para criar DFs separados com base no valor da coluna

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve