【问题标题】:Named anchors in a horizontal layout水平布局中的命名锚点
【发布时间】:2017-01-01 21:13:45
【问题描述】:

在我正在开发的网站中,我有一堆不同大小的图像以水平布局布局。我有一些命名的锚链接,点击时也会跳转到特定的图像。如果单击链接,我需要选择的图像位于页面的中心,而不是最后。有没有办法给锚点添加一些负偏移?

提前致谢

HTML:

<a href="#item-9">Link to item 9</a>
<div class="carousel-frame">
  <ul>
    <li id="item-1" class="carousel-item">
      <span>1</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-2" class="carousel-item">
      <span>2</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-3" class="carousel-item">
      <span>3</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-4" class="carousel-item">
      <span>4</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-5" class="carousel-item">
      <span>5</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-6" class="carousel-item">
      <span>6</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-7" class="carousel-item">
      <span>7</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-8" class="carousel-item">
      <span>8</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-9" class="carousel-item">
      <span>9</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-10" class="carousel-item">
      <span>10</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-11" class="carousel-item">
      <span>11</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-12" class="carousel-item">
      <span>12</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-13" class="carousel-item">
      <span>13</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-14" class="carousel-item">
      <span>14</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-15" class="carousel-item">
      <span>15</span>
      <img src="http://placehold.it/200x150" />
    </li>
    <li id="item-16" class="carousel-item">
      <span>16</span>
      <img src="http://placehold.it/200x150" />
    </li>
  </ul>
</div>

CSS:

.carousel-frame {
  width: 100%;
  margin-bottom: 0.5em;
  padding-bottom: 1em;
  position: relative;
  white-space: nowrap;
}
.carousel-frame ul {
  margin: 0;
  padding: 0;
  height: 100%;
  list-style: none;
}
.carousel-frame li.carousel-item {
  cursor: pointer;
  display: inline-block;
  margin: 0 5px 0 0;
  padding: 0;
}
.carousel-frame li.carousel-item span {
  display: block;
}

这是一个小提琴:

https://jsfiddle.net/z4524opd/2/

【问题讨论】:

    标签: jquery html css anchor horizontal-scrolling


    【解决方案1】:

    你可以使用animate:

    $('a[href^="#item-"]').on('click', function(e) {
      e.preventDefault();
    
      // select the carousel-frame
      var divCarousel = $('.carousel-frame');
    
      // select the corresponding carousel-item
      var objToMove = divCarousel.find(this.getAttribute('href'));
    
      // compute the new left position
      var newPos = (objToMove.position().left - divCarousel.width())  +  (divCarousel.width() + objToMove.width()) / 2;
    
      // move to the new position
      divCarousel.animate({left: -newPos}, 2000);
    })
    .carousel-frame {
      width: 100%;
      margin-bottom: 0.5em;
      padding-bottom: 1em;
      position: relative;
      white-space: nowrap;
    }
    .carousel-frame ul {
      margin: 0;
      padding: 0;
      height: 100%;
      list-style: none;
    }
    .carousel-frame li.carousel-item {
      cursor: pointer;
      display: inline-block;
      margin: 0 5px 0 0;
      padding: 0;
    }
    .carousel-frame li.carousel-item span {
      display: block;
    }
    
    a {
      text-decoration: none; font: menu;
      display: inline-block; padding: 2px 8px;
      background: ButtonFace; color: ButtonText;
      border-style: solid; border-width: 2px;
      border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    
    <a href="#item-1"> item 1</a>
    <a href="#item-2"> item 2</a>
    <a href="#item-3"> item 3</a>
    <a href="#item-4"> item 4</a>
    <a href="#item-5"> item 5 </a>
    <a href="#item-6"> item 6</a>
    <a href="#item-7"> item 7</a>
    <a href="#item-8"> item 8</a>
    <a href="#item-9"> item 9</a>
    <a href="#item-10"> item 10</a>
    <a href="#item-11"> item 11</a>
    <a href="#item-12"> item 12</a>
    <a href="#item-13"> item 13</a>
    <a href="#item-14"> item 14</a>
    <a href="#item-15"> item 15</a>
    <a href="#item-16"> item 16</a>
    <div class="carousel-frame">
        <ul>
            <li id="item-1" class="carousel-item">
                <span>1</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-2" class="carousel-item">
                <span>2</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-3" class="carousel-item">
                <span>3</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-4" class="carousel-item">
                <span>4</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-5" class="carousel-item">
                <span>5</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-6" class="carousel-item">
                <span>6</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-7" class="carousel-item">
                <span>7</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-8" class="carousel-item">
                <span>8</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-9" class="carousel-item">
                <span>9</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-10" class="carousel-item">
                <span>10</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-11" class="carousel-item">
                <span>11</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-12" class="carousel-item">
                <span>12</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-13" class="carousel-item">
                <span>13</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-14" class="carousel-item">
                <span>14</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-15" class="carousel-item">
                <span>15</span>
                <img src="http://placehold.it/200x150" />
            </li>
            <li id="item-16" class="carousel-item">
                <span>16</span>
                <img src="http://placehold.it/200x150" />
            </li>
        </ul>
    </div>

    【讨论】:

    • 如果链接在不同的页面上会发生什么?也就是像这样 www.domain.com/page.php#item-n
    • @user1991185 js和html一起组成一个页面。如果您打算在不同的页面上采取行动,我不知道这怎么可能。请更好地解释你的想法。
    • 我在一个页面中有一个缩略图网格,当我单击其中任何一个时,我想转到页面,其中所有全尺寸图像水平放置,单击的图像位于中心。希望我自己解释一下。
    • @user1991185 因此,如果您需要跟随锚分页导航,这意味着您将失去中心效果。如果在此其他页面上您继续拥有相同的轮播,您可以添加相同的 js 函数 animate。为了实现这一点,请从脚本中删除 e.prevenetDefault()。我希望这会对你有所帮助。
    猜你喜欢
    • 2011-08-26
    • 1970-01-01
    • 2011-07-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2013-03-20
    • 1970-01-01
    相关资源
    最近更新 更多