【问题标题】:How do I make a fixed div of text change as content changes?如何在内容更改时更改文本的固定 div?
【发布时间】:2012-12-17 16:36:02
【问题描述】:

我有一个页面,其中我的内容(图像)向下滚动并在侧面有一个固定的标题。我需要固定 div 一侧的标题,随着图像的滚动而变化,以描述每个图像。

请看http://kimcolemanprojects.com/artworks.html

感谢您就如何实现这一目标提出任何建议。

安吉拉

【问题讨论】:

  • 您能否编辑您的问题并添加一个小(尽可能)示例来演示该问题?这样我们就可以更轻松地为您提供帮助,并且当您解决网站上的问题(或链接更改)时,这个问题对未来的访问者仍然有用。此外,了解您到目前为止所尝试的内容会有所帮助。

标签: jquery html fixed scrolltop


【解决方案1】:

几周前我写了一个简单的 jQuery 表达式,所以这里有一个适合您要求的简单解决方案...

jQuery 表达式

jQuery.expr.filters.inView = function(el) {
    var width = $(el).width(),
        height = $(el).height(),
        offset = $(el).offset(),

        vp_dimensions = {
            height: $(window).height(),
            width: $(window).width()
        },
        y_offset = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop),
        x_offset = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);

    return (
    offset.top < (y_offset + vp_dimensions.height) && offset.left < (x_offset + vp_dimensions.width) && (offset.top + height) > y_offset && (offset.left + width) > x_offset);
};

滚动事件

$(window).scroll(function() {

    $('li').each(function() {
        var self = $(this),
            title = self.prev('.title').text();
        if (self.is(':inView')) {
            $('#title').find('h2').text(title);
        }
    });

}).scroll();

Fiddle

更新

为了做得更好,我删除了您的占位符 .title,并将其内容添加到您的 img-alt 属性中:

$(window).scroll(function() {

    $('li').each(function() {
        var self = $(this),
            title = self.find('img').attr('alt');
        if (self.is(':inView')) {
            $('#title').find('h2').text(title);
        }
    });

}).scroll();

还有你的新 HTML:

<div id="header">
    <div id="title">
        <h2>Untitled 1</h2>
    </div>
</div>
<div id="main" class="main">
    <ul>
        <li id="1">
            <a onClick="goToByScroll('2')" href="javascript:void(0)"><img src="Untitled17.jpg" alt="Unititled 1"></a>
        </li>
        <li id="2">
            <a onClick="goToByScroll('3')" href="javascript:void(0)"><img src="Untitled9.jpg" alt="Unititled 2"></a>
        </li>
        <li id="3">
            <a onClick="goToByScroll('4')" href="javascript:void(0)"><img src="Frame2.jpg" alt="Unititled 3"></a>
        </li>
        <li id="4">
            <a onClick="goToByScroll('1')" href="javascript:void(0)"><img src="Untitled2.jpg" alt="Unititled 4"></a>
        </li>
    </ul>
</div>

Fiddle

更新

我已重建您的链接锚点并删除了“inline-onclick”事件:

Complete Site - Fiddle

【讨论】:

  • 现在只是尝试一下,但是它似乎阻止了我的单击滚动脚本的工作?是jquery版本的原因吗?
  • 我要说的是,IDclass 不能以数字开头...给他们一个像这样的 id:&lt;li id="u1"&gt;&lt;li id="u2"&gt; 等。
  • 好的,谢谢你的建议,但是我仍然需要我的图片在点击时滚动到顶部以及标题发生变化。这可能吗?谢谢你的时间
  • @user1566289 你能再解释一下吗?
  • function goToByScroll(id){ $('html,body').animate({scrollTop: $("#"+id).offset().top},'slow');当您单击图像时,它应该向上滚动到页面上的下一个图像,因此您可以通过单击每个图像来查看它的一长页图像以查看下一个图像向上滚动到视图中。上面的代码在做什么。
【解决方案2】:

您需要做的是使用 jQuery 观看滚动事件并随时检查滚动位置。

这是一个通用示例:

$(window).scroll(function(){ 
  to_top = $(document).scrollTop();
  if ( $('img').offset().top == to_top ) {
      $('#id-of-title-div').text('text to change to');
  }
});

【讨论】:

  • 我已经使用了该代码并完成了此操作,但它无法正常工作,我做错了什么。 $(window).scroll(function(){ to_top = $(document).scrollTop(); if ($('#1').offset().top = to_top) { $('#title').text ('photogram1'); } }); $(window).scroll(function(){ to_top = $(document).scrollTop(); if ( $('#2').offset().top = to_top ) { $('#title').text ('photogram2'); } });等等??
  • 首先在$(window).scroll 事件中做所有事情。你不想要其中的多个。您将只有多个 if 语句或 if else 语句。您也可以使用 switch 语句
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多