【问题标题】:Sliding divs horizontally with JQuery使用 JQuery 水平滑动 div
【发布时间】:2012-03-25 21:38:12
【问题描述】:

所以我对 Javascript 和 Jquery 非常陌生。我想要创建的是一个两列页面,其中左列上的链接将导致右侧的 div 从左到右水平滑入,并在再次单击时滑出视图。我知道我需要使用滑动切换效果,但我无法以每个单独的链接导致不同的 div 滑动的方式实现它......我试图调整我通过谷歌搜索找到的一些 jsfiddles 但是说到javascript,我很迷茫。

到目前为止,这是我能够成功调整的唯一小提琴... http://jsfiddle.net/bridget_kilgallon/HAQyK/
但那些垂直滑动,并在单击时加载所有 div。

这是我为不需要任何 javascript 的页面布局创建的小提琴... http://jsfiddle.net/bridget_kilgallon/NhanG/

请帮忙! :) -布里奇特

【问题讨论】:

    标签: jquery toggle slide


    【解决方案1】:

    不幸的是,jQuery 没有现成的“水平”幻灯片动画。除非你使用更大的包,比如 jQuery UI。但我认为没有必要。

    您唯一想要的就是在 jQuery 中创造性地使用 animate() 函数来实现效果。

    由于描述模糊,我不知道您要使用哪一个,所以我举了两个例子来说明面板切换中的次要效果:

    http://jsfiddle.net/sg3s/rs2QK/ - 这个滑动面板从左侧打开并向右关闭

    http://jsfiddle.net/sg3s/RZpbK/ - 在打开新面板之前,面板从左向右滑动打开并靠近左侧。

    资源:

    你不能用纯 CSS 做到这一点,反正现在还不行。对转换的支持是基本的,并且仅限于基于 webkit 的浏览器。因此,既然您将需要 jQuery 巧妙地使用它,但您仍然需要确保在使用 JS 之前尽可能多地使用 css 样式。请注意,我的 JS 中没有使用任何视觉样式/操作。

    【讨论】:

    • 第一把小提琴刚刚好。在按照您的建议添加脚本之前,我将确保创建我的 css。这让我的生活变得更轻松了——非常感谢! :D
    • 想想你想要做什么,并相应地在 css 中定位你的元素,以便它们处于最佳位置,以便在需要时立即开始。
    • 这是我目前掌握的 css 方面的一个小提琴:jsfiddle.net/bridget_kilgallon/sMDyB/4 小提琴工作正常,但在 Dreamweaver 中的转换不起作用。有什么想法吗?再次感谢-BK
    • 从头开始 - 我想我明白了 :)
    【解决方案2】:

    如果不使用 JavaScript,您只能使用 CSS 过渡(如果可用)。虽然这些都非常令人印象深刻,但就我所发现的而言,它们对于条件动画来说并不是特别好;它们基本上可以从一个起点动画到另一个点然后返回(基于浏览器本身可用的本机浏览器事件),使用 JS,您可以添加/删除其他类并让 div 元素移动到您的心脏内容,但不是“仅” CSS(尽管我很想在这方面被证明是错误的)。

    到目前为止,我能想到的最好的是:

    #left {
        float:left;
        width:200px;
    }
    .right {
        height: 0;
        background-color: #fff;
        margin-left: 205px;
        overflow: hidden;
        -webkit-transition: all 1s linear;
        -ms-transition: all 1s linear;
        -o-transition: all 1s linear;
        -moz-transition: all 1s linear;
        transition: all 1s linear;
    }
    .right:target {
        display: block;
        height: 5em;
        background-color: #ffa;
        -webkit-transition: all 1s linear;
        -ms-transition: all 1s linear;
        -o-transition: all 1s linear;
        -moz-transition: all 1s linear;
        transition: all 1s linear;
    }​
    

    JS Fiddle demo.

    并且这不会从侧面滑动(尽管您可以这样做),因为它看起来不太好,因为随着元素宽度的变化而发生的内容重排。


    已编辑,因为我认为我可能误解了原始问题的一部分:

    ...我希望没有任何 javascript

    既然如此,评论(如下)似乎表明 jQuery 是一个不错的选择,这可能值得作为演示:

    ​$('#left a').click(
        function(){
            var div = $('div').not('#left').eq($(this).index('#left a'));
            var others = $('div[data-visible="true"]');
            others.each(
                function(){
                    $(this).animate({
                        'left' : '2000px'
                    },1000,function(){
                        $(this).removeAttr('style data-visible');
                    });
                });
            if (div.attr('data-visible')) {
                div.animate({
                    'left' : '2000px'
                },1000,function(){
                    $(this).removeAttr('style data-visible');
                });
            }
            else {
                div.animate({
                    'left' : '210px'
                },1000).attr('data-visible',true);
            }
        });​​​​​​​​
    

    JS Fiddle demo.

    参考资料:

    【讨论】:

    • 非常好-感谢您的回复!我对您不需要脚本来执行此操作印象深刻。我知道您可以使用 animate 函数来更改 div 的宽度以创建水平幻灯片,但我对内容更改宽度也并不疯狂(我认为这就是您所指的重新流动)。我不反对使用 jquery 来创建幻灯片——我只是对它很陌生。您是否偶然知道会产生这种效果的脚本?
    • 是的;当我读到“我想要没有任何 javascript”时,我想我误解了你的意思。 ...这是漫长的一天... =/而且我不知道预先存在的脚本(尽管我怀疑有很多),但这是一个似乎有效的脚本。如果您看到编辑,请按照<hr /> =)
    • 拉德。那真好;那真甜!唯一的问题是在 div 幻灯片中单击相同的链接两次?
    • 这不是故意的吗?而且,坦率地说,检查双击是徒劳的。您的用户可能对网络有足够的了解,知道单击是它的工作原理。如果不是,他们很快就会......如果检测到dblclick,可能会弹出一个警告框,告诉他们停止它?
    • 对于这种基本的东西来说似乎非常复杂。但至少你费心查找所有使用的函数的文档:|
    【解决方案3】:

    您可以使用 jQuery UI 中的 effects 模块并使用 show('slide')。看http://jsfiddle.net/HAQyK/1/

    【讨论】:

    • 这是另一个小提琴:jsfiddle.net/bridget_kilgallon/6eKGj 这几乎正是我想要的,除了... 1. 单击链接时会出现所有 div - 我如何链接到每个单独的 div? 2.有什么办法可以让第二次点击链接时div反向滑动? (即在 click1 上向右滑动,在 click2 上向左滑动)
    【解决方案4】:

    这是您想要的代码。 已证明可在 IE、Safari、Chrome、Firefox 等上运行。

    这是 HTML 部分。

        <div id="slide-wrap" style="width:1000px; height:200px; overflow:hidden; padding:0 auto;">
            <div id="inner-wrap" style="float:left;">
                <!-- 'Put Inline contains here like below.' -->
                <div class='containBox' style="width:250px; height:100%; float:left; display:inline-block;"></div>
                <!--  ...  -->
                <div class='containBox' style="width:250px; height:100%; float:left; display:inline-block;"></div>
                <!-- 'Put Inline contains here like above.' -->
            </div>
            <div style="display: block; width:40px; height:60px; position: absolute; margin-left:0px;   margin-top:40px">
                <img id='scroll_L_Arrow' src='../assets/img/l-arrow.png' onclick="scrollThumb('Go_L')"/>
            </div>
            <div style="display: block; width:40px; height:60px; position: absolute; margin-left:960px; margin-top:40px">
                <img id='scroll_R_Arrow' src='../assets/img/r-arrow.png' onclick="scrollThumb('Go_R')"/>
            </div>
        </div>
    

    这是 JavaScript 函数中的 jQuery 部分。

           function scrollThumb(direction) {
            if (direction=='Go_L') {
                $('#slide-wrap').animate({
                    scrollLeft: "-=" + 250 + "px"
                }, function(){
                    // createCookie('scrollPos', $('#slide-wrap').scrollLeft());
                });
            }else
            if (direction=='Go_R') {
                $('#slide-wrap').animate({
                    scrollLeft: "+=" + 250 + "px"
                }, function(){
                    // createCookie('scrollPos', $('#slide-wrap').scrollLeft());
                });
            }
           }
    

    要隐藏箭头,请看这里。 Detect end of horizontal scrolling div with jQuery

    【讨论】:

      【解决方案5】:
      $(function () {
      $("#wizardV").steps({
          headerTag: "h2",
          bodyTag: "section",
          transitionEffect: "slideLeft",
          stepsOrientation: "vertical"
      });
      });
      

      *// 向导是一个包含所有内容的 div

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-01
        • 1970-01-01
        • 2015-03-20
        相关资源
        最近更新 更多