Нажатие на ссылку и карту изображения вызывает ненужное перемещение страницы - PullRequest
2 голосов
/ 10 июня 2011

Я понимаю, что я все еще довольно новичок здесь, но у меня есть статичное изображение (Google Map, но пока не использует Google API), в котором я создал горячие точки, которые будут получать данные о местоположении, которые находятся в таблице слева от карта. Однако при нажатии на точку доступа страница прокручивается вниз, так что верхняя часть карты (карта изображения) находится в верхней части экрана, даже если информация находится рядом с картой.

Я предполагаю, что это потому, что якорь пытается загрузить в верхней части экрана. Это было бы хорошо, за исключением того, что мой заголовок теперь выталкивается за пределы экрана. Есть ли способ, чтобы страница не «двигалась» при щелчке по горячей точке?

Страницу можно увидеть здесь: http://www.mydillonsupply.com/default.aspx?page=customer&file=customer/disupp/customerpages/locations_page.htm

Спасибо за любую помощь, которую вы можете оказать этому nube.

Ответы [ 3 ]

1 голос
/ 10 июня 2011

Вместо использования поведения браузера по умолчанию (для тегов привязки) просто заблокируйте его и прокрутите поле самостоятельно.Я вижу, вы уже используете JQuery.Таким образом, что-то вроде этого должно сработать.

$('area').bind('click', function(e) {
    e.preventDefault();
    // the div in question has nothing uniquely identifiable as it is now,
    // assign it a unqie class or id so you can select it
   var findAnchor=this.href.split('#')[1];
    $('#the_div').scrollTop($('a[name="' + findAnchor+'"]').next().position().top);
});

Довольно сложно протестировать в контексте этой страницы, но если вы настроите скрипку только с этой частью, я уверен, что это может бытьочень легко работать правильно.

(правка) - OP настроил скрипту с проблемой, обновленная версия здесь:

http://jsfiddle.net/H3Mz6/9/

Код выше былобновлен, чтобы отразить то, что на самом деле работает.Я также добавил идентификатор "the_div" в div, окружающий таблицу локаций.Вот как это работает:

1) получить часть href после # - браузер может добавить полный URL.2) найдите его, затем получите элемент next(), потому что невидимые теги привязки сообщат, что у них нет информации о местоположении. 3) затем получите значение position().top, которое является положением этого элемента относительно его контейнера 4), затем scrollTop(..) к нему


Вопреки предложению @ colinross, нет ничего, что не было бы ни расширяемым, ни негибким в отношении карт изображений.Напротив, они являются единственным способом получения горячих точек неправильной формы, без особых проблем, и это дает вам много сил.Все, что вам нужно сделать, чтобы заставить их делать то, что вы хотите, это связать свои собственные события наведения мыши и / или щелчка с областями и вызвать e.preventDefault().Оттуда все ваши.

Да, мне нравятся карты с изображениями, и я также написал плагин , который очень много с ними делает.Так что я довольно предвзят.Но меня удивляет проблема, с которой люди сталкиваются, чтобы избежать их (например, абсолютно позиционирование якорных ссылок, сложных CSS и т. Д.), Когда они чрезвычайно просты, просты в использовании, работают с любым браузером под солнцем игораздо более мощный, чем размещение всех ваших горячих точек вручную.(И без карты изображений или какой-то сумасшедшей логики, чтобы выяснить, где находится мышь, вы все равно ограничены прямоугольными областями!).

0 голосов
/ 10 июня 2011

Когда вы нажимаете на ссылку, ваш тег <a name="Nashville"></a>, относящийся к указанному городу, в итоге прокручивается до верхней части вашего <!-- table containing locations -->.

Впоследствии это будет работать точно так же, как и со ссылкой "Top", где вы размещаете <a name="TOP"></a> вверху вашей страницы, а затем <a href="#TOP">Back to top</a> внизу вашей страницы. Он попытается поместить <a name="Nashville"> как можно ближе к вершине области просмотра (пример: http://mix26.com/demo/local_scroll/index.html).

Вы можете попробовать что-то вроде этого ( найдено здесь ):

<html>
<head>
<title>Document Title</title>

<script type="text/javascript" language="javaScript">
<!--
  function go_anchor(n){
    document.getElementById("div1").scrollTop = document.getElementById(n).offsetTop
  }
// -->
</script>
</head>

<body>
<a href="#null" onclick="go_anchor('sp1')">To anchor 1</a><br />
<a href="#null" onclick="go_anchor('sp2')">To anchor 2</a><br />
<a href="#null" onclick="go_anchor('sp3')">To anchor 3</a><br />
<a href="#null" onclick="go_anchor('sp4')">To anchor 4</a><br />

<div id="div1" style="position:absolute; left:30; top:100; width:330; height:200; clip:rect(0,330,200,0); overflow:auto; padding:5;border:2px solid black"> 
<p><a href="#null" onclick="go_anchor('sp1')">To anchor 1</a></p>
<p>Dummy Text 2</p>
<p>Dummy Text 3</p>
<p>Dummy Text 4</p>
<p>Dummy Text 5</p>
<p>Dummy Text 6</p>
<p>Dummy Text 7</p>

<p><span id="sp1">Anchor 1</span></p>

<p>Dummy Text 9</p>
<p>Dummy Text 10</p>
<p>Dummy Text 11</p>
<p>Dummy Text 12</p>
<br/><br/><br/><br/><br/>

<span id="sp2">Anchor 2</span>

<br/><br/><br/><br/><br/>

<span id="sp3">Anchor 3</span>

<br/><br/><br/><br/><br/>

<span id="sp4">Anchor 4</span>

<br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/>
The End
</div> 

</body>
</html>
0 голосов
/ 10 июня 2011

Прыжок происходит потому, что вы используете карту изображения, которая обрабатывает щелчок для местоположения # DillonLocationsMap.

Это тот же результат, что и привязка на странице, такая как <a name="over_here" /> и ссылкав других местах <a href="#over_here">Go over here.</a>

Я бы посоветовал вам не использовать карту изображений, чтобы быть честными, и они не очень расширяемы и не настраиваемы.

дают рыбам ответ Переместите элемент <map> вверх, например, перед элементом таблицы # MainTable.Технически он все равно будет прыгать, но ваш заголовок все еще будет виден.

ps Таблицы для верстки страниц заставляют панд плакать; (

...