天兴工作室

主题演示站

记录瀑布流+下拉无限加载+lightbox页面踩的坑

最近接了个单,页面需要瀑布流加上下拉无限加载,另外点击图片还要有灯箱效果。这种复杂程度的页面自己写显然毫无意义[重复造轮子不可取,另外这种程度的轮子造不出来...]

直接上现成的库。

瀑布流用”masonry“,下拉无限加载用”infinitescroll“,图片灯箱用”lightGallery“。

坑就在整合里面了。

masonry和infinitescroll一起使用有很多教程。

第一个坑就是下拉加载新出来的页面”lightGallery“没有效果。

查询搜索之后发现要在”infinitescroll“下拉加载成功后回调函数里面用”destroy“销毁再重新加载数据。

第二个坑是masonry在加载的时候有的图片加载的比较慢就会发生获取不到图片高度导致页面页面重叠的问题。这个问题还是在客户的网站上发现的,自己的测试站因为速度还可以根本没发现...

解决办法就是要先判断图片是否加载完成,等全部的图片加载完成后再去执行masonry瀑布流效果。


最后附上代码,三个库的js文件都要加载这个就不贴了,下面的是三个库直接的整合代码:

var $container = $('.img-wrap'); // masonry大容器
var t_img; // 定时器
var isLoad = true; // 控制变量
     isImgLoad(function () {
            // 加载完成
            setTimeout(function() {
            $container.masonry({
                itemSelector: '.img-item', //masonry项目
                columnWidth: '.img-item',//masonry宽度
                percentPosition: true
            });
        }, 100);
        });

        function isImgLoad(callback) {
            $('.img').each(function () { //图片全部给"img"类名
                if (this.height === 0) {
                    isLoad = false;
                    return false;
                }
            });
            if (isLoad) {
                clearTimeout(t_img);
                callback();
            } else {
                isLoad = true;
                t_img = setTimeout(function () {
                    isImgLoad(callback);
                }, 500);
            }
        }

        $container.infinitescroll({
                navSelector: "#npage",
                nextSelector: "#npage a",
                itemSelector: ".img-item",
                pixelsFromNavToBottom: 300,
                loading: {
                    msgText: '我正在给力载入中...',
                    finishedMsg: '已经全部看完了哦',
                },
            },
            function(newElements) {
                $(".img-wrap").data("lightGallery").destroy(true);
                createLightGallery();
                var $newElems = $(newElements).css({
                    opacity: 0
                });
                setTimeout(function() {
                    $newElems.animate({
                        opacity: 1
                    });
                    isImgLoad(function () {
                         $container.masonry('appended', $newElems, true);
                    });
                }, 100);
            }
        );

swiper做导航栏时自动跳转至对应分类的代码

给客户做一个zblog模板,手机端需要实现一个滑动导航栏的需求。分为上下两部分,一级分类显示在上面当导航栏,下面则显示该分类的子分类,左右滑动可切换。

于是准备直接用swiper实现,直接new了两个Swiper对象,然后绑定切换,这个效果Swiper官网有案例的。

然后出现了一个问题,当打开列表页的时候导航栏需要切换到当前分类并高亮显示,底部也要切换到对应的子分类模块显示。

尝试了一些方法后用“slideTo”这个方法解决了,分享下思路过程和代码。

首先了解下“slideTo”这个方法的参数,官方文档说明:https://www.swiper.com.cn/api/methods/109.html

思路大概就是循环导航栏swiper,对比哪一个跟当前页面的链接是相同的,然后获取它的“data-swiper-slide-index”值;

然后用“slideTo”方法,把上面获取到值赋给子分类模块的swiper,即可实现需求。

代码:

导航栏swiper的class为“gallery-thumbs”,子分类模块swiper的class为“galleryTop”。js代码如下:

var surl = location.href;
$(".gallery-thumbs .swiper-slide a").each(function() {
    if ($(this).attr("href") == surl) {
        var liebs = $(this).parent().attr("data-swiper-slide-index");
        var liebss = liebs - 1;
        galleryTop.slideTo(liebss,0, false);
    }
});

最后总结下,swiper确实很强大。

css实现的图片连续横向滚动效果

今天用css写了个图片连续横向滚动,完成效果如下:

GIF 2020-7-31 17-39-12.gif

总共用了两张图,一张背景图,一张滚动图,html结构如下:

<div class="img-box">
    <img src="背景图地址">
    <div class="roll-img1"><img src="滚动图片地址"></div>
    <div class="roll-img2"><img src="滚动图片地址"></div>
</div>

然后是css

/* 动画1 */
@keyframes rollimg1 {
    0% {
        left: 0;
    }
    100% {
        left: -100%;
    }
}
/* 动画1 */
@keyframes rollimg2 {
    0% {
        left: 100%;
    }
    100% {
        left: 0;
    }
}
/* 最外层 */
.img-box{
    position: relative;
    overflow: hidden;
}
/* 背景图 */
.img-box>img{
    display: block;
    position: relative;
    line-height: 1;
    width: 100%;
    height: auto;
    z-index: 1;
}
/* 最开始滚动的图片 */
.roll-img1{
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 2;
    overflow: hidden;
    animation: rollimg1 12s infinite linear;
    display: flex;
    align-items: center;
}
/* 接着滚动的图片 */
.roll-img2{
    position: absolute;
    top: 0;
    left: 100%;
    width: 100%;
    height: 100%;
    z-index: 2;
    overflow: hidden;
    animation: rollimg2 12s infinite linear;
    display: flex;
    align-items: center;
}

以上就是用css的“@keyframes”动画效果来实现图片横向滚动的全部代码了,调节滚动速度修改“animation”里面的“12s”中的数字即可。

html图片和css背景图片哪个先开始加载?css占位图怎么操作?

如果你的网站是个图片站,首页显示了很多图片。那么你就会有图片多了导致加载比较慢的困扰。这个时候有几个方案解决。

1、物理解决方案:加大网站的带宽+压缩图片大小;

2、用图片懒加载js,图片没加载出来之前先加载个缓冲图片占位;

3、也就是本文讨论的,用css来加一个占位图;


首先想到的就是给图片外层加一个盒子包裹住,然后给这个盒子设置一个背景图。

然后在测试过程中发现,这个方案不起效果,图片没加载出来的时候这个盒子的背景图并不会及时显示出来,往往等图片快加载出来的才会一现而逝。

通过查询资料得知,浏览器渲染dom的时候是先加载html里面的图片,再加载css里面的背景图片的。所以这个方案才不会有改有的效果...


换另外一种方案:

在外层盒子的伪类“after”里面动脑筋,给外层盒子设置个“position: relative;”,然后设置给伪类设置“position:absolute;”宽度高度都为100%;加个背景色,再加上提示文字“content:"加载中";”,出来的效果图下:

QQ截图20200409100810.png

这个操作除了没有动画外,基本上该有的作用都有了。

css写三角形的原理和使用方法

之前一直用css写三角形,反正网上搜一个案例出来,能用就行。今天花了功夫弄懂了原理和使用方法,记录下来,希望能对跟我基础一样弱的人有所帮助。

222.png

首先css写三角形是通过border实现的,大多数人用border就是定义边框的。所以要用border来写三角形就会掉到边框的思维模式里面去出不来...

先来一个定义,元素的border其实是三角形组合成的,神不神奇?意不意外?

我们来一段代码证实下这个问题:

.box{
    width:50px;
    height:50px;
    border-width:50px;
    border-style: solid;
    border-color:orange blue red green;
}

然后你会发现页面显示是这个样子滴:

1.png

弄懂了这个概念那么三角形就好写了,例如我们要角向下的三角形,就把上边框颜色保留,其他三个颜色全部设置成透明“transparent”就行。

所以我们只需要来把上面的代码改成“border-color:orange transparent transparent transparent;”就行,验证下:

2.png

果然成功了,弄懂了原理和用法就可以弄出各种三角形了。还可以用多个div盒子拼凑弄出来其他各种各样的图形呢。

一个输入框调用多个搜索引擎的js代码

要实现的方法是这样的:

QQ截图20190817214315.png

一个输入框输入关键词,可以调用多个搜索引擎搜索,实现代码是如下:

<div class="search clearfix">
    <input type="text" name="q" id="bdcsMain" value="输入关键词搜索" onfocus="if (value =='输入关键词搜索'){value =''}" onblur="if (value ==''){value='输入关键词搜索'}" >
    <button class="search-bd" type="submit" onclick="window.open('https://www.baidu.com/s?wd='+document.getElementById('bdcsMain').value)">百度</button>
    <button class="search-tb" type="submit" onclick="window.open('http://ai.taobao.com/search/index.htm?pid=mm_你的淘宝pid&amp;key='+document.getElementById('bdcsMain').value)">淘宝</button>
    <button class="search-by" type="submit" onclick="window.open('http://cn.bing.com/search?q='+document.getElementById('bdcsMain').value)">必应</button>
</div>

再加上一段js代码可以实现按回车键默认调用第一个搜索:

<script>
    $("#bdcsMain").keydown(function (e) {//当按下按键时  
        if (e.which == 13) {//.which属性判断按下的是哪个键,回车键的键位序号为13  
            $('button.search-bd').trigger("click");//触发搜索按钮的点击事件  
        }  
    });  
</script>

css效果可以根据自己需求写,搜索引擎数量也没啥限制。

一个纯html+css的下拉导航动画效果

这是天兴工作室自己折腾的一个纯html+css写的下拉导航动画,代码如下。

html部分:

<div class="nav">
    <ul class="clearfix">
        <li><a href="#">自定义</a></li>
        <li><a href="#">自定义</a></li>
        <li>
            <a href="#">自定义</a>
            <ul>
                <li><a href="#">自定义</a></li>
                <li><a href="#">自定义</a></li>
                <li><a href="#">自定义自定义</a></li>
            </ul>
        </li>
        <li><a href="#">自定义</a></li>
        <li>
            <a href="#">自定义</a>
            <ul>
                <li><a href="#">自定义</a></li>
                <li><a href="#">自定义</a></li>
                <li><a href="#">自定义自定义</a></li>
            </ul>
        </li>
        <li><a href="#">自定义</a></li>
        <li><a href="#">自定义</a></li>
    </ul>
</div>

css部分:

.nav{background-color:#404553;}
.nav li{position:relative;float:left;}
.nav li a{display:block;line-height:40px;padding:0 20px;color:#fff;}
.nav li ul{position:absolute;left:-20px;top:60px;background-color:#404553;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s;z-index: 0;opacity: 0;visibility: hidden}
.nav li ul li a{white-space: nowrap;line-height:30px;}
.nav li:hover ul{top:40px;padding:6px 0;opacity:1;visibility:visible;}

动画效果大概是鼠标放上去之后,从下往上慢慢提起来。比较重要是属性是“visibility”,才发现visibility可以这么用...

JQ特效之:页面向上滚动时弹出模块

页面向上滚动弹出模块这个特效比较适合资源类网站,用户来到你的网站后一般动作就算向下翻页找,找着找着发现没找到,一般会回到顶部去找导航栏之类的,这个时候就会产生一个向上滚动的动作。

这个时候就适合弹出一个搜索框提醒用户可以直接通过搜索找到想要的东西哦。

这就算是一个用户体验优化的东西吧,本文来介绍来这个特效的搞法。

照惯例还是用JQ(不会原生js,李姐万岁),所以请先引入JQ库。

具体JQ代码如下:

var p=0,t=160;
var sc=$(document);    
$(window).scroll(function(e){  
    p = $(this).scrollTop(); 
    if(t>=p){            
        if(p < 10){                
            $(".search-top").slideUp(); 
        }else{                
            $(".search-top").slideDown(); 
        }        
    }  
    setTimeout(function(){t = p;},0);         
});

然后页面里面放一个class为"search-top"的div,给这个div写上固定在顶部的css并设置隐藏。具体css代码如下:

.search-top{
    position:fixed; 
    left:0;
    top:0;
    width:100%;
    padding:15px;
    background-color:rgba(255,255,255,0.9);
    box-shadow: 0 1px 4px rgba(0,0,0,.1);
    z-index:999;
    display:none;
}

div模块里面具体放啥就自己决定了。

比较简单易懂的跟随滚动侧栏模块 JQ+html+css

一个跟随滚动条滚动而固定的侧栏模块被认为是放广告位或者推广网站最理想的地方,本文就来详细说下这个效果应该怎么搞。首先声明:以下代码纯属个人瞎折腾,如有错漏欢迎指出。

这个效果需要用到JQ,所以一定要引入JQ库。

html代码:

<div class="fixed-location"></div>
<div class="fixed-con">
    这里面是内容 随便放啥
</div>

上面这段html代码复制到你网站的侧栏代码里面去。

js代码:

var fixedbox = $(".fixed-con"),st;
var fixedlocation = $(".fixed-location").offset().top;
$(window).scroll(function () {
    st = Math.max(document.body.scrollTop || document.documentElement.scrollTop);
    if(st > fixedbox.offset().top){
        fixedbox.addClass("fixedbox-on");
    }
    if(st < fixedlocation){
        fixedbox.removeClass("fixedbox-on");
    } 
});

以上代码解释:先获取页面滚动时离页面顶部的高度;获取要固定div离页面顶部的距离,获取要用来定位的div离页面顶部的距离,当页面滚动到固定div的时候给它加上一个css属性。然后用添加的css属性来设置这个div固定住。

css代码:

.fixedbox-on{position: fixed;top: 0;z-index: 999;}

请注意,这个css里面没有设置宽度,当一个div设定了“position: fixed”的时候没有设定宽度会出问题,所以请务必根据你网站侧栏的宽度给上面的css里面加上一个宽度设定就行了。

一个页面可多处重复使用的简单tab标签jQuery代码

之前一直用“SuperSlide”这个js框架写tab标签或者其他一些效果,但是后来慢慢发现,写zblog主题用不上这么大的js框架,特别是SuperSlide对手机端很不友好,所以现在没怎么用了。

现在页面的一些简单的js效果都慢慢开始手写了,本文为大家介绍的就是一个“在一个页面可多处重复使用的简单tab标签jQuery代码”。

ps:此代码依赖JQ库,请在使用前先引入1.8以上版本的JQ库。

js代码如下:

function tabs(tabTit,on,tabCon){
    $(tabTit).children().click(function(){
        $(this).addClass(on).siblings().removeClass(on);
        var index = $(tabTit).children().index(this);
        $(tabCon).children().eq(index).show().siblings().hide();
    });
};
tabs(".tab-hd","active",".tab-bd");

html代码结构如下:

<div class="box">
    <ul class="tab-hd"><li class="active">标签1</li><li>标签2</li><li>标签3</li></ul>
    <dl class="tab-bd">
        <dd class="thisclass">内容1</dd>
        <dd>内容2</dd>
        <dd>内容3</dd>
    </dl>
</div>

此代码可以在一个页面里面多处使用,给每个box里面加上私有class属性即可定义不同的tab风格了。

<< 1 >>
«    2025年5月    »
1234
567891011
12131415161718
19202122232425
262728293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接

Powered By Z-BlogPHP 1.7.4

天兴工作室主题演示站点,如遇到问题请联系我们的在线qq:207649916咨询