javascript - JQuery 使水平滚动页面太大

标签 javascript jquery html css

我正在为客户制作一个侧滚动博客文章页面。经过多次尝试和错误后,我最终使用 JQuery 使网站在较大时向右滚动,或者在移动时向上或向下滚动。唯一的问题是,当文档最初在非移动浏览器中加载时,它的宽度为 40,000 像素。这是代码。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.js"></script>
<script>
    (function($){
        var windowH = $(window).height();
        var windowW = $(window).width();

        $(window).on('load', function(){
            if(windowW >= windowH) {//this is horizontal
                var allImgWidth = 0;
                $('article img').each(function(){
                    allImgWidth += $(this).width() + 10 ;//10 is padding
                });
                $('html, body').width(allImgWidth);   //makes page width of all images and padding that I have set elsewhere
                $('article img').height(windowH - 150);//this accounts for header height and margin height from top

                // $('article img').css('margin-left', '10px');
            } else {
                $('article img').width(windowW);//if window width is not greater than window height, the images are the width of the original window
            }

            if(windowW >= windowH) {
                (function() {
                    function scrollHorizontally(e) {
                        e = window.event || e;
                        var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
                        document.documentElement.scrollLeft -= (delta*80); // Multiplied by 80 (increases speed of scroll)
                        document.body.scrollLeft -= (delta*80); // Multiplied by 80
                        e.preventDefault();
                    }

                    if (window.addEventListener) {
                        // IE9, Chrome, Safari, Opera
                        window.addEventListener("mousewheel", scrollHorizontally, false);
                        // Firefox
                        window.addEventListener("DOMMouseScroll", scrollHorizontally, false);
                    } else {
                        // IE 6/7/8
                        window.attachEvent("onmousewheel", scrollHorizontally);
                    }
                })();//function scrollHorizontally ends
            } else {
            }//else ends
        });//onload ends 

        $(window).resize(function(){
            var windowH = $(window).height();
            var windowW = $(window).width();

            if(windowW >= windowH) { //horizontal
                var allImgWidth = 0;
                $('article img').each(function(){
                    allImgWidth += $(this).width() + 11 ;
                });
                $('html, body').width(allImgWidth);   
                $('article img').height(windowH - 150);
                $('article img').css('width','auto');//dynamically resizes pics
                $('article img').css('margin-left', '9px');
            } else { //vertical
                $('html, body').width(windowW);  
                $('article img').width(windowW);
                $('article img').css('height','auto');
                $('article img').css('margin-top', '10px');
            }

            if(windowH >= windowW) {
                $(window).on('mousewheel DOMMouseScroll', function(event){
                    if (event.originalEvent.wheelDelta > 0 || event.originalEvent.detail < 0) {
                        // scroll up
                    } else {
                        // scroll down
                    }
                });
            } else {
                $(window).off('mousewheel DOMMouseScroll');
                (function() {
                    function scrollHorizontally(e) {
                        e = window.event || e;
                        var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
                        document.documentElement.scrollLeft -= (delta*80); // Multiplied by 80 (increases speed of scroll)
                        document.body.scrollLeft -= (delta*80); // Multiplied by 80
                        e.preventDefault();
                    }

                    if (window.addEventListener) {
                        // IE9, Chrome, Safari, Opera
                        window.addEventListener("mousewheel", scrollHorizontally, false);
                        // Firefox
                        window.addEventListener("DOMMouseScroll", scrollHorizontally, false);
                    } else {
                        // IE 6/7/8
                        window.attachEvent("onmousewheel", scrollHorizontally);
                    }
                })();//function scrollHorizontally ends
            }
        });//window resize ends   
    })(jQuery);//full function ends
</script>

然后是页面本身的正文...

<div id="page-wrap">
    <article class="post">
        <img src="assets/images/tumblr_nqvdnry3Du1ttpk3mo1_1280.jpg">
        <p>This is a caption!</p>
    </article>
    <article class="post">
        <img src="assets/images/tumblr_nqvdktfpUS1ttpk3mo3_1280.jpg">
        <p>This is a caption!</p>
    </article>
    <article class="post">
        <img src="assets/images/tumblr_nqvdktfpUS1ttpk3mo2_1280.jpg">
        <p>This is a caption</p>
    </article>
    <article class="post">
        <img src="assets/images/tumblr_nqvdktfpUS1ttpk3mo1_1280.jpg">
        <p>this is a caption</p>
    </article>
    <article class="post">
        <img src="pictures/photo3.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo4.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo5.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo6.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo7.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo7.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo7.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo7.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo7.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo7.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo7.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo7.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo7.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo7.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo7.jpg">
    </article>
    <article class="post">
        <img src="pictures/photo1.jpg">
    </article>
</div>

调整页面大小后,效果很好。 onload 对于小屏幕来说很好。只有在页面最初加载时的大屏幕中才会有这么大。想法?

最佳答案

您将使用以下代码将所有图像宽度添加在一起:

$('article img').each(function(){
    allImgWidth += $(this).width() + 11 ;
});

然后将 html/body 宽度设置为该数字。

因此,如果页面宽度为 40,000px,则 allImgWidth 就等于该宽度。检查以确保页面上没有其他图像包含在 $('article img') 选择器中。

关于javascript - JQuery 使水平滚动页面太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399788/

相关文章:

jquery - slider 显示特定值的元素

javascript - Android Webview 有时不加载 HTML

javascript - JavaScript 中是否有任何方法可以使用字符串格式的名称来调用在另一个函数范围内声明的函数?

javascript - 创建一页视差样式,封面背景

javascript - 有没有办法在 Web Worker 中创建 DOM 元素?

javascript - 如何在不使用插件的情况下检查视口(viewport)中的哪个部分?

javascript - 对元素文本的更改会破坏它的父委托(delegate)事件处理程序

jquery - Twitter Bootstrap Tabs 事件类切换不起作用

javascript - React-Redux-从列表中删除项目

html - WordPress 下拉菜单问题