light7中标签下实现两个无限滚动

    我在项目中用了light7自带的标签功能,实现点击显示不同的数据,两个不同的数据都是列表,从数据拿值,通过前端做循环显示出来的。如果是一次性从数据库中拿数据的话会导致加载的时间比较长,进而网页加载就会比较慢,所以考虑运用light7的无限滚动功能,先显示10条数据,然后下滑滚动的时候到最低端触发无限滚动事件,到数据库中拿值,这样就解决了加载慢的问题。

 因为这个页面是有两个标签的,这样就导致了另外一个问题,那就是无限滚动的事件运用到一个列表中时是OK的,两个列表都要运用时就会有问题了。

 解决办法就是在事件中加一个判断就完美解决了,这次的代码有个小瑕疵,就是我没有remove掉加载的div,还是隐藏掉了,不过不影响功能的实现。


html代码:

<div class="content">
    <div class="buttons-tab">
        <a href="#tab1" class="tab-link active button">tab1</a>
        <a href="#tab2" id="tabl2" class="tab-link button">tab2</a>
    </div>
    <div class="tabs">
        <div id="tab1" class="tab active">
            <div id="ta1" class="list-block">
                <ul class="list-container"></ul>
            </div>
            <!-- preloader -->
            <div class="infinite-scroll-preloader">
                <div class="preloader"></div>
            </div>
        </div>
        <div id="tab2" class="tab">
            <div id="ta2" class="list-block">
                <ul class="list-container"></ul>
            </div>
            <!-- preloader -->
            <div class="infinite-scroll-preloader">
                <div class="preloader"></div>
            </div>
        </div>
    </div>
</div>


js代码:

<script>
    var loading = false;
    var maxItems = 100;

    var itemsPerLoad = 20;

    function addItems(number, lastIndex) {
        var html = '';
        for (var i = lastIndex + 1; i <= lastIndex + number; i++) {
            html += '<li class="item-content"><div class="item-inner"><div class="item-title">Item ' + i + '</div></div></li>';
        }
        return html;
    }
    addItems(itemsPerLoad, 0);


    var lastIndex = 20;

    $(document).on('infinite', '.infinite-scroll',function() {
        if($("#tab1").hasClass("active"))
        {
            // 如果正在加载,则退出
            if (loading) return;

            // 设置flag
            loading = true;

            setTimeout(function() {
                loading = false;

                if (lastIndex >= maxItems) {
                    $.detachInfiniteScroll($('.infinite-scroll'));
                    $('.infinite-scroll-preloader').css("visibility", "hidden");
                    return;
                }

                $('#ta1').append(addItems(itemsPerLoad, lastIndex));
                lastIndex = $('.list-container li').length;
            }, 1000);
        }
        else if($("#tab2").hasClass("active"))
        {
            // 如果正在加载,则退出
            if (loading) return;

            // 设置flag
            loading = true;

            setTimeout(function() {
                loading = false;

                if (lastIndex >= maxItems) {
                    $.detachInfiniteScroll($('.infinite-scroll'));
                    $('.infinite-scroll-preloader').css("visibility", "hidden");
                    return;
                }

                $('#ta2').append(addItems(itemsPerLoad, lastIndex));
                lastIndex = $('.list-container li').length;
            }, 1000);
        }
    });
</script>








在 `MVVM Light` ,可以使用 `Messenger` 类来实现两个窗体之间的通信。`Messenger` 是 `MVVM Light` 框架提供的一种消息传递机制,它能够让不同的对象之间进行通信,而不需要相互持有引用。以下是一个示例代码,用于在两个窗体之间传递数据: 首先,在发送窗体定义一个 `Message` 类型,并在构造函数初始化该类型的对象: ```csharp public class MyMessage { public string Data { get; set; } } public partial class SenderWindow : Window { public SenderWindow() { InitializeComponent(); DataContext = this; // 初始化 Message 对象 var message = new MyMessage { Data = "Hello, World!" }; // 发送消息 Messenger.Default.Send(message); } } ``` 然后,在接收窗体注册 `Messenger`,并在回调方法处理接收到的消息: ```csharp public partial class ReceiverWindow : Window { public ReceiverWindow() { InitializeComponent(); DataContext = this; // 注册消息接收器 Messenger.Default.Register<MyMessage>(this, OnMessageReceived); } private void OnMessageReceived(MyMessage message) { // 处理接收到的消息 MessageBox.Show(message.Data); } } ``` 在上面的示例,我们在发送窗体创建了一个 `MyMessage` 对象,并通过 `Messenger` 发送了该对象。在接收窗体,我们注册了一个接收器,用于接收 `MyMessage` 类型的消息。当发送窗体发送消息时,接收窗体的 `OnMessageReceived` 方法会被回调,然后我们可以在该方法处理接收到的消息。 需要注意的是,在接收窗体注册 `Messenger` 时,需要在窗体关闭时注销接收器,以避免内存泄漏: ```csharp protected override void OnClosed(EventArgs e) { Messenger.Default.Unregister<MyMessage>(this); base.OnClosed(e); } ``` 以上是使用 `MVVM Light` 实现两个窗体之间传值的示例代码,希望能够对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值