Я сделал многоразовый плагин, который может это сделать ... Я оставил привязку к событиям вне самого плагина, потому что я чувствую, что это слишком навязчиво для такого маленького помощника ....
jQuery(function ($) {
/**
* This small plugin will scrollTo a target, smoothly
*
* First argument = time to scroll to the target
* Second argument = set the hash in the current url yes or no
*/
$.fn.smoothScroll = function(t, setHash) {
// Set time to t variable to if undefined 500 for 500ms transition
t = t || 500;
setHash = (typeof setHash == 'undefined') ? true : setHash;
// Return this as a proper jQuery plugin should
return this.each(function() {
$('html, body').animate({
scrollTop: $(this).offset().top
}, t);
// Lets set the hash to the current ID since if an event was prevented this doesn't get done
if (this.id && setHash) {
window.location.hash = this.id;
}
});
};
});
Теперь, после этого, мы можем загрузить только это, проверьте хэш, и если он попытается использовать его непосредственно в качестве селектора для jQuery. Теперь я не мог легко проверить это в то время, но недавно я сделал похожие материалы для производственных площадок, если это не сразу работает, дайте мне знать, и я рассмотрю решение, которое я получил там.
(сценарий должен находиться в разделе onload)
if (window.location.hash) {
window.scrollTo(0,0);
$(window.location.hash).smoothScroll();
}
Затем мы привязываем плагин к onclick якорей, которые содержат только хэш в свой атрибут href.
(скрипт должен быть в пределах секции onload)
$('a[href^="#"]').click(function(e) {
e.preventDefault();
$($(this).attr('href')).smoothScroll();
});
Поскольку jQuery ничего не делает, если само совпадение не выполняется, у нас есть хороший резерв, когда цель на странице не может быть найдена yay \ o /
Обновить
Альтернативный обработчик onclick для прокрутки вверху, когда theres только хеш:
$('a[href^="#"]').click(function(e) {
e.preventDefault();
var href = $(this).attr('href');
// In this case we have only a hash, so maybe we want to scroll to the top of the page?
if(href.length === 1) { href = 'body' }
$(href).smoothScroll();
});
Вот также простой jsfiddle, который демонстрирует прокрутку внутри страницы , onload немного сложно настроить ...
http://jsfiddle.net/sg3s/bZnWN/
Обновление 2
Таким образом, у вас могут возникнуть проблемы с тем, что окно уже прокручивается до элемента onload. Это исправляет: window.scrollTo(0,0);
он просто прокручивает страницу влево. Добавили его в фрагмент кода выше.
Мой тестовый код:
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(20, 20, 200, 72);
UIImage *image = [UIImage imageNamed:@"rob.png"];
[button setImage:image forState:UIControlStateNormal];
button.imageEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
[button setTitle:@"Hello" forState:UIControlStateNormal];
button.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[self.view addSubview:button];
Обратите внимание, что я установил button.contentHorizontalAlignment
, а не button.titleLabel.textAlignment
. Мой результат:
Поместите цвет фона на заголовок. Могу поспорить, что он подходит по размеру, поэтому выравнивание текста не имеет значения. Это только столько, сколько нужно. Что вам нужно исправить, так это положение самой этикетки. Возможно, вам придется расширить UIButton и переопределить layoutSubviews, чтобы сделать это правильно. Я никогда не видел кнопки с чем-то кроме центрированного ярлыка.
Swift 3
Установить свойство contentHor HorizontalAlignment делать работу. Спасибо
yourButton.contentHorizontalAlignment = .left
Установите свойство contentHor HorizontalAlignment для кнопки:
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
Просто переопределите установщик кнопки и попробуйте установить свойство contentHorizontAlignment в установщике:
-(UIButton *)yourButton {
[_yourButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
return _yourButton;
}
установите свойство contentHorizontAlignment для кнопки, оно будет работать.
YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
Swift 4.0
YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignment.center