You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular如何实现输入框从搜索图标位置滑入而非最右侧的动画

解决方案

你遇到的问题核心是输入框和搜索图标不在同一个相邻布局容器内,导致translateX(100%)的位移参考位置不符合预期,按照以下步骤修改即可实现从搜索图标位置滑入的效果:

1. 调整HTML布局结构

将搜索输入框和搜索图标包裹在同一个父容器内,保证二者位置相邻:

<!-- 外层工具栏容器保持原有逻辑即可,只需修改搜索相关部分 -->
<div class="toolbar-right">
  <!-- 搜索模块包裹容器 -->
  <div class="search-wrapper">
    <span class="search-input-wrapper">
      <input *ngIf="visibleSearch" [@slideInOut] type="search" matInput placeholder="Search" />
    </span>
    <mat-icon class="toolbar-icon" (click)="visibleSearch = !visibleSearch;">search</mat-icon>
  </div>
  <!-- 其余图标保持不变 -->
  <mat-icon class="toolbar-icon">perm_identity</mat-icon>
  <mat-icon class="toolbar-icon" matBadge="15" matBadgeColor="warn">shopping_cart</mat-icon>
</div>

2. 添加对应CSS样式

保证搜索模块布局符合动画要求:

.search-wrapper {
  display: flex;
  align-items: center;
}

.search-input-wrapper {
  /* 隐藏输入框滑入前的超出部分 */
  overflow: hidden;
  /* 可根据需求调整输入框的宽度 */
  width: 200px;
}

/* 可选:给输入框加右侧边距,避免和搜索图标挨太近 */
input[type=search] {
  margin-right: 8px;
  width: 100%;
}

3. 调整动画配置

保持原有逻辑基本不变,可额外添加透明度动画让效果更自然:

animations: [
  trigger('slideInOut', [
    transition(':enter', [
      style({
        transform: 'translateX(100%)',
        opacity: 0
      }),
      animate('200ms ease-in', style({
        transform: 'translateX(0%)',
        opacity: 1
      }))
    ]),
    transition(':leave', [
      animate('200ms ease-in', style({
        transform: 'translateX(100%)',
        opacity: 0
      }))
    ])
  ])
]

修改完成后,输入框初始会向右平移自身100%宽度,刚好叠加在搜索图标的位置,动画触发时向左滑入到正常位置,完全符合需求。


内容的提问来源于stack exchange,提问作者Steve Barthelot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:15:05