mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-19 03:32:21 +08:00
refactor(search-bar): Added JS to calculate the margin of the iOS cancel button
References #247
This commit is contained in:
@ -15,8 +15,9 @@ $search-bar-ios-input-height: 28px !default;
|
|||||||
$search-bar-ios-input-placeholder-color: #9D9D9D !default;
|
$search-bar-ios-input-placeholder-color: #9D9D9D !default;
|
||||||
$search-bar-ios-input-text-color: #000 !default;
|
$search-bar-ios-input-text-color: #000 !default;
|
||||||
$search-bar-ios-input-background-color: #FFFFFF !default;
|
$search-bar-ios-input-background-color: #FFFFFF !default;
|
||||||
$search-bar-ios-input-transition: all 0.3s linear !default;
|
$search-bar-ios-input-transition: all 400ms cubic-bezier(.25, .45, .05, 1) !default;
|
||||||
//cubic-bezier(.25, .45, .05, 1)
|
$search-bar-ios-cancel-transition: all 400ms cubic-bezier(.25, .45, .05, 1) !default;
|
||||||
|
|
||||||
$search-bar-ios-input-close-icon-color: #8F8E94 !default;
|
$search-bar-ios-input-close-icon-color: #8F8E94 !default;
|
||||||
$search-bar-ios-input-close-icon-svg: "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'><path fill='" + $search-bar-ios-input-close-icon-color + "' d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>" !default;
|
$search-bar-ios-input-close-icon-svg: "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'><path fill='" + $search-bar-ios-input-close-icon-color + "' d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>" !default;
|
||||||
$search-bar-ios-input-close-icon-size: 17px !default;
|
$search-bar-ios-input-close-icon-size: 17px !default;
|
||||||
@ -88,19 +89,9 @@ $search-bar-ios-input-close-icon-size: 17px !default;
|
|||||||
|
|
||||||
.search-bar-cancel {
|
.search-bar-cancel {
|
||||||
@extend button[clear];
|
@extend button[clear];
|
||||||
// transition: all 2s cubic-bezier(.25, .45, .05, 1);
|
transition: $search-bar-ios-cancel-transition;
|
||||||
transition: $search-bar-ios-input-transition;
|
|
||||||
transition-duration: 3s !important;
|
|
||||||
margin-right: calc(-100%);
|
|
||||||
// transform: translate3d(100px,0,0);
|
|
||||||
// max-width: 0;
|
|
||||||
min-height: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-bar-cancel.left-align {
|
|
||||||
max-width: initial;
|
|
||||||
margin-right: 0;
|
|
||||||
padding-left: 8px;
|
padding-left: 8px;
|
||||||
|
min-height: 0;
|
||||||
padding-right: 0;
|
padding-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,3 +69,7 @@ $search-bar-md-input-close-icon-size: 22px !default;
|
|||||||
right: 13px;
|
right: 13px;
|
||||||
top: 13px;
|
top: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.search-bar-cancel {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
@ -74,6 +74,16 @@ export class SearchBar extends Ion {
|
|||||||
this.query = '';
|
this.query = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add the margin for iOS
|
||||||
|
afterViewInit() {
|
||||||
|
this.cancelButton = this.elementRef.nativeElement.querySelector('.search-bar-cancel');
|
||||||
|
|
||||||
|
if (this.cancelButton) {
|
||||||
|
this.cancelWidth = this.cancelButton.offsetWidth;
|
||||||
|
this.cancelButton.style.marginRight = "-" + this.cancelWidth + "px";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Much like ngModel, this is called from our valueAccessor for the attached
|
* Much like ngModel, this is called from our valueAccessor for the attached
|
||||||
* ControlDirective to update the value internally.
|
* ControlDirective to update the value internally.
|
||||||
@ -99,10 +109,18 @@ export class SearchBar extends Ion {
|
|||||||
inputFocused() {
|
inputFocused() {
|
||||||
this.isFocused = true;
|
this.isFocused = true;
|
||||||
this.shouldLeftAlign = true;
|
this.shouldLeftAlign = true;
|
||||||
|
|
||||||
|
if (this.cancelButton) {
|
||||||
|
this.cancelButton.style.marginRight = "0px";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
inputBlurred() {
|
inputBlurred() {
|
||||||
this.isFocused = false;
|
this.isFocused = false;
|
||||||
this.shouldLeftAlign = this.value.trim() != '';
|
this.shouldLeftAlign = this.value.trim() != '';
|
||||||
|
|
||||||
|
if (this.cancelButton) {
|
||||||
|
this.cancelButton.style.marginRight = "-" + this.cancelWidth + "px";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clearInput() {
|
clearInput() {
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
<ion-search-bar ng-control="searchQuery" show-cancel="true"></ion-search-bar>
|
<ion-search-bar ng-control="searchQuery" show-cancel="true"></ion-search-bar>
|
||||||
<label> Search - Custom Cancel Button </label>
|
<label> Search - Custom Cancel Button </label>
|
||||||
<ion-search-bar ng-control="searchQuery" show-cancel="true" cancel-text="Done"></ion-search-bar>
|
<ion-search-bar ng-control="searchQuery" show-cancel="true" cancel-text="Done"></ion-search-bar>
|
||||||
|
<label> Search - Custom Cancel Button Long Text</label>
|
||||||
|
<ion-search-bar ng-control="searchQuery" show-cancel="true" cancel-text="I Am So Done"></ion-search-bar>
|
||||||
<label> Search - Custom Cancel Action</label>
|
<label> Search - Custom Cancel Action</label>
|
||||||
<ion-search-bar ng-control="searchQuery" show-cancel="true" cancel-text="Done" [cancel-action]="myCancelAction"></ion-search-bar>
|
<ion-search-bar ng-control="searchQuery" show-cancel="true" cancel-text="Done" [cancel-action]="myCancelAction"></ion-search-bar>
|
||||||
</form>
|
</form>
|
||||||
|
Reference in New Issue
Block a user