Как убрать слеш в ссылке меню

#1 26 декабря 2014 в 09:15
Делаю лэндинг, там в меню нужно указывать #якоря (#company #body #foot ...) При загрузке страницы меню имеет адреса со слешем <a href="/#company" >О компании</a> при этом якоря работают страницу перелистывает на нужное место, но не подключается скрипт плавной прокрутки.
в пхп не шарю, попробовал удалил 174 строку
  1. if (!$is_root_added && mb_strpos($item['url'], 'http://')===false) { $item['url'] = href_to($item['url']); }
в файле /system/controllers/menu/model.php повезло слеш пропал😊плавная прокрутка заработала.
Подскажите может как-то правильнее есть решение.
#2 26 декабря 2014 в 14:50
WebStudioPro, а если явно указать ссылки:

instantcms.ru#company

на выходе вроде будет так

<a href="http://instantcms.ru#company" >О компании</a>

не?)
#3 26 декабря 2014 в 16:28
reload, нет при указании полной ссылки страница заново загружается, да и скрипт не цепляется, нужно чтоб начинался с #

фаворит.онлайн
#4 26 декабря 2014 в 16:35
так без указания полной ссылки как раз и начинается в коде с #
а с указанием разумеется с http

ps: у вас что-то с кодом! Чувствую что вам нужно код прокрутки поправить либо сменить а не урлы править)

Попробуйте другой код прокрутки применить — их много на сколько я понимаю)

Или покажите тот что применяете, может все вместе найдем как его подпилить под двиг!
#5 26 декабря 2014 в 16:41
фаворит.онлайн
фаворит.онлайн/templates/default/js/yakor.js

  1. $(document).ready(function() {
  2. // вызываем функцию, устанавливающую обработчик события клика по ссылкам, ссылающимся на анкор
  3. setup_slight_scroll_to_anchors();
  4. });
  5.  
  6. // простая функция, реализующая плавное скроллирование
  7. function setup_slight_scroll_to_anchors() {
  8. $('a[href^="#"]').click(function(){
  9. var link = $(this);
  10. // этой строчкой игнорируем ссылки, состоящие из единственного символа #
  11. if (link.attr('href') == '#') return;
  12. var target = link.attr('href');
  13. var target_top = $(target).offset().top - 70;
  14. $('html, body').animate({scrollTop: target_top}, 1500);
  15. return false;
  16. });
  17. }
Вместо # ставил /#
Скрипты пробовал разные, ни один не работает
#6 26 декабря 2014 в 17:04

Вместо # ставил /#

WebStudioPro
я не силен в js, но попробуйте заэкранировать слеш. То есть получиться
  1. ('a[href^="\/#"]')
#7 26 декабря 2014 в 18:03

я не силен в js

Rossoman
я вообще далекий от всего этого)

Но, WebStudioPro, как я понимаю, скрипт отлавливает клик по ссылке #

По идее вам нужно сменить регулярку или отлавливать клик до другим признакам…

но попробуйте заэкранировать слеш.

Rossoman

а для начала его добавить его!) слеша ведь нет)

WebStudioPro, попробуйте внести изменение которое советует Rossoman, по идее должно получиться…
#8 26 декабря 2014 в 19:06
  1. ('a[href^="\/#"]')
Непомогло.

Кстати без этой 174 строки которую удалил, ещё и плюс в адресной строке не показываются якоря фаворит.онлайн/#company, фаворит.онлайн/#uslugi
#9 26 декабря 2014 в 19:16
WebStudioPro
1. Там не регулярка а обычный jQuery селектор)) (и "/#" — должно было отработать нормально)
2. Попробуйте: $('a[href*="#"]').click(function(){ ... — этот селектор будет искать подстроку "#" в href ссылки.
3. Перешел по вашей ссылки, пощелкал все пункты меню, и у меня все работает! скроллится плавно к якорю. Или я что-то не так смотрю?!
#10 26 декабря 2014 в 19:50
Val, в первом сообщении написал что удалил какую-то строку, не знаю за что отвечает и заработало. Просто хотел узнать, есть ли нормальный способ чтоб не рвать куски, да чтоб работало меню потом и не в лэндинге.
#11 26 декабря 2014 в 20:38
WebStudioPro, не зная что за строку вы удалили трудно гарантировать нормальную работу)))
#12 26 декабря 2014 в 20:39

1. Там не регулярка а обычный jQuery селектор))

Val

Хотел исправить, но подумал что суть и так будет понятна)

… селектор ведь можно сменить раз данный не всегда срабатывает?) к примеру класс или ид?)

2. Попробуйте: $('a[href*="#"]').click(function(){

Val

так сейчас и есть…

Просто хотел узнать, есть ли нормальный способ чтоб не рвать куски, да чтоб работало меню потом и не в лэндинге.

WebStudioPro

Конечно есть — не двиг пилить нужно по скрипт, а скрипт под двиг!) тем более что скрипт из 3х строчек)

Я плохо разбираюсь в коде, в основном все методом тыка с помощью гугла)

Но понимаю как оно работает, поэтому для начала взял бы еще пару вариантов скролинга, проверил их работу и оставил бы рабочий или слепил из всех один)
#13 26 декабря 2014 в 20:51

взял бы еще пару вариантов скролинга

reload
брал, проверял
#14 26 декабря 2014 в 20:52



Val:
2. Попробуйте: $('a[href *= "#"]').click(function(){

так сейчас и есть…

reload

не смотрел как сейчас на сайте)) но в приведенном коде выше не так! =)
Рубрика найдите 10 отличий laugh
в коде селектор $('a[href ^= "#"]') — ищет все элементы a атрибут href которых НАЧИНАЕТСЯ (^) с символа "#".
я же предложил использовать $('a[href *= "#"]') (вместо ^ стоит *) этим мы ищем все элементы <a> с атрибутом href которых содержит "#" в любой позиции строки. Т.е. если # есть (после слеша / или без него неважно), то вешает на эту ссылку обработчик клика.
#15 26 декабря 2014 в 20:58

но в приведенном коде выше не так! =)

Val
да уже заметил как начал серфить)

еще нашел цацку: github.com/flesler/jquery.scrollTo
мож пригодиться…
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.