简体   繁体   English

jQuery.ScrollTo和scroll事件无法正常工作

[英]jQuery.ScrollTo and scroll event aren't working corectly

I haven't find any solution for this question so I'm asking it again, here is the previous question link: jQuery.ScrollTo onAfter settings isn't working correctly 我没有找到这个问题的解决方案,所以我再次询问,这是前面的问题链接: jQuery.ScrollTo onAfter设置无法正常工作

I'm using the jQuery.ScrollTo script to be able to vertically scroll to the selected image or to the next image. 我正在使用jQuery.ScrollTo脚本,以便能够垂直滚动到选定的图像或下一个图像。 (This depend if the "presentation" class is attach to my images container) (这取决于“ presentation”类是否附加到我的图像容器)

To do it, I have created two states:"the presentation mode" and the "no presentation mode". 为此,我创建了两个状态:“演示模式”和“无演示模式”。

I'm activate the presentation mode when we are clicking on an image by adding the global class "presentation" to my container "#galleries". 当我们通过将全局类“ presentation”添加到我的容器“ #galleries”中来单击图像时,我激活了演示模式。 With this class "on", I can determine if I have to display the current image or scroll to the next one. 通过将此类设置为“开”,我可以确定是否必须显示当前图像或滚动到下一张图像。

To quite the presentation mode, I wrote the "$(window).scroll" function. 在完全演示模式下,我编写了“ $(window).scroll”函数。 This function is quitting the presentation mode when the user is scrolling inside the page. 当用户在页面内滚动时,此功能退出演示模式。

Problem: when I was using the .scrollTo event during the presentation mode, I was always quitting the "presentation" mode because of the "$(window).scroll" function. 问题:在演示模式下使用.scrollTo事件时,由于“ $(window).scroll”功能,我总是退出“演示”模式。 So, I had the global variable "presentation_mode_stop_scrolling" to stop it, but this isn't working 因此,我使用了全局变量“ presentation_mode_stop_scrolling”来停止它,但这不起作用

Here is my problem: After a click event on a picture, sometime, my class "presentation" is removed by my $(window).scroll function, any ideas??? 这是我的问题:在图片上单击事件之后,有时,我的类“演示”被我的$(window).scroll函数删除了,有什么主意吗?

Here is Demo: http://jsfiddle.net/qnQSP/12/ 这是演示: http : //jsfiddle.net/qnQSP/12/

Here is my code: 这是我的代码:

<div id="galleries">
    <div id="pictures-content" class="1"><img src="http://www.sb-designs.co.uk/ckfinder/userfiles/images/free%20web%20hosting.jpg"></div>
    <div id="pictures-content" class="2"><img src="http://www.mastercreations.net/wp-content/uploads/2012/10/5.jpg"></div>
    <div id="pictures-content" class="3"><img src="http://www.sb-designs.co.uk/ckfinder/userfiles/images/free%20web%20hosting.jpg"></div>
    <div id="pictures-content" class="4"><img src="http://www.webdesign4essex.co.uk/images/essex_website_design.jpg"></div>
    <div id="pictures-content" class="5"><img src="http://www.mastercreations.net/wp-content/uploads/2012/10/5.jpg"></div>
</div>

My script 我的剧本

presentation_mode_stop_scrolling = "off";

// Calling functions
$(document).ready(function(){ 


// ADD THE POST ANIMATION ON PICTURE TO CENTER IT IN THE MIDDLE OF THE SCREEN

    var picture_to_center_class = "";   
    var picture_to_center = "";

    $("#galleries #pictures-content").unbind("click");
    $("#galleries #pictures-content").bind("click", function(event) {

        // Check if we are in the presentation mode
        var class_galleries = $("#galleries").attr('class');
        if(class_galleries == "picture_presentation")
        {
        // WE ARE IN THE PRESENTATION MODE
        // GO TO THE NEXT ONE
        $("#galleries").addClass('picture_presentation');  
            console.log("WE ARE IN THE PRESENTATION MODE, GO TO THE NEXT ONE");
            var new_picture = parseInt(picture_to_center_class)+1;

            // Stopping the scroll event to cancelled the presentation mode
            presentation_mode_stop_scrolling="on";

            //scrolling to the next one
            var picture_to_center = $("#galleries ."+new_picture);      
            $("body").scrollTo(picture_to_center, 800, {onAfter:function(){

                console.log("galleries class: "+$("#galleries").attr('class'));
                presentation_mode_stop_scrolling="off";
                return false;
                console.log("removed class");
            }});
        }
        else
        {
        // THE PRESENTATION MODE
        // FOCUS THIS ONE
            // We are adding the presentation mode to the DOM 
            $("#galleries").addClass("picture_presentation");
            console.log("PRESENTATION MODE, FOCUS THIS ONE, ADDING THE PRESENTATION CLASS ");

            // Get the binding element class number 
            picture_to_center_class = $(this).attr('class');
            console.log("picture_to_center: "+picture_to_center_class);

            picture_to_center = $("#galleries ."+picture_to_center_class);


             // Stoping the (windows).scroll to removed the galleries class 
            presentation_mode_stop_scrolling="on";
            $("body").scrollTo(picture_to_center, 800, {onAfter:function(){
                 presentation_mode_stop_scrolling="off"; 
                 return false;
                 $("#galleries").addClass('picture_presentation');
//               console.log("galleries class: "+$("#galleries").attr('class'));
                 } });
         }
         return false;
    });

    // ADD THE FUNCTION TO REMOVE THE USER FROM THE PRESENTATION MODE   
    $(window).scroll(function () {
//  console.log("presentation_mode_stop_scrolling: "+presentation_mode_stop_scrolling); 
      if(presentation_mode_stop_scrolling=="off")
      {
          $("#galleries").removeClass("picture_presentation");
          console.log("THE PRESENTATION MODE HAS BEEN REMOVED");
      }
    }); 


}); 

I believe this is the result you are looking for, I have cleaned up the code a bit but the idea is the same. 我相信这是您要寻找的结果,我已经整理了一些代码,但是想法是一样的。

http://jsfiddle.net/cf26A/5/ http://jsfiddle.net/cf26A/5/

The main problem is $(window).scroll fires once after onAfter function being executed, that's why the presentation_mode_stop_scrolling flag is always being turned off. 主要问题是$(window).scroll onAfter函数执行触发一次,这就是为什么presentation_mode_stop_scrolling标志始终关闭的原因。

I added a tiny delay to deal with this problem, probably not the best practice. 我添加了一点点延迟来处理此问题,可能不是最佳实践。 There should be a way to stop $(window).scroll being fired. 应该有一种方法可以阻止$(window).scroll被触发。 If anyone knows, leave a comment as I would like to learn as well. 如果有人知道,请留下我想学习的评论。

Hope it helps. 希望能帮助到你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM