1. 程式人生 > >jquery 下拉重新整理 上拉載入

jquery 下拉重新整理 上拉載入

/**
 * Created by Administrator on 2015/11/20.
 */
// 需要引入 zepto.min.js 檔案
// dropload.js 檔案內容
;(function($){
    'use strict';
var $win = $(window);
var $doc = $(document);
$.fn.dropload = function(options){
        return new MyDropLoad(this, options);
};
var MyDropLoad = function(element, options){
        var 
me = this; me.$element = $(element); me.insertDOM = false; me.loading = false; me.isLock = false; me.init(options); }; // 初始化 MyDropLoad.prototype.init = function(options){ var me = this; me.opts = $.extend({}, { scrollArea : me.$element,
// 滑動區域 domUp : { // 上方DOM domClass : 'dropload-up', domRefresh : '<div class="dropload-refresh">↓下拉重新整理</div>', domUpdate : '<div class="dropload-update">↑釋放更新</div>', domLoad : '<div class="dropload-load"><span class="loading"></span>
載入中...</div>' }, domDown : { // 下方DOM domClass : 'dropload-down', domRefresh : '<div class="dropload-refresh">↑上拉載入更多</div>', domUpdate : '<div class="dropload-update">↓釋放載入</div>', domLoad : '<div class="dropload-load"><span class="loading"></span>載入中...</div>' }, distance : 50, // 拉動距離 loadUpFn : '', // 上方function loadDownFn : '' // 下方function }, options); // 判斷滾動區域 if(me.opts.scrollArea == window){ me.$scrollArea = $win; }else{ me.$scrollArea = me.opts.scrollArea; } // 繫結觸控 me.$element.on('touchstart',function(e){ if(!me.loading && !me.isLock){ fnTouches(e); fnTouchstart(e, me); } }); me.$element.on('touchmove',function(e){ if(!me.loading && !me.isLock){ fnTouches(e, me); fnTouchmove(e, me); } }); me.$element.on('touchend',function(){ if(!me.loading && !me.isLock){ fnTouchend(me); } }); }; // touches function fnTouches(e){ if(!e.touches){ e.touches = e.originalEvent.touches; } } // touchstart function fnTouchstart(e, me){ me._startY = e.touches[0].pageY; // 判斷滾動區域 if(me.opts.scrollArea == window){ me._meHeight = $win.height(); me._childrenHeight = $doc.height(); }else{ me._meHeight = me.$element.height(); me._childrenHeight = me.$element.children().height(); } me._scrollTop = me.$scrollArea.scrollTop(); } // touchmove function fnTouchmove(e, me){ me._curY = e.touches[0].pageY; me._moveY = me._curY - me._startY; if(me._moveY > 0){ me.direction = 'down'; }else if(me._moveY < 0){ me.direction = 'up'; } var _absMoveY = Math.abs(me._moveY); // 載入上方 if(me.opts.loadUpFn != '' && me._scrollTop <= 0 && me.direction == 'down'){ e.preventDefault(); if(!me.insertDOM){ me.$element.prepend('<div class="'+me.opts.domUp.domClass+'"></div>'); me.insertDOM = true; } me.$domUp = $('.'+me.opts.domUp.domClass); fnTransition(me.$domUp,0); // 下拉 if(_absMoveY <= me.opts.distance){ me._offsetY = _absMoveY; // 待解決:move時會不斷清空、增加dom,有可能影響效能,下同 me.$domUp.html('').append(me.opts.domUp.domRefresh); // 指定距離 < 下拉距離 < 指定距離*2 }else if(_absMoveY > me.opts.distance && _absMoveY <= me.opts.distance*2){ me._offsetY = me.opts.distance+(_absMoveY-me.opts.distance)*0.5; me.$domUp.html('').append(me.opts.domUp.domUpdate); // 下拉距離 > 指定距離*2 }else{ me._offsetY = me.opts.distance+me.opts.distance*0.5+(_absMoveY-me.opts.distance*2)*0.2; } me.$domUp.css({'height': me._offsetY}); } // 載入下方 if(me.opts.loadDownFn != '' && me._childrenHeight <= (me._meHeight+me._scrollTop) && me.direction == 'up'){ e.preventDefault(); if(!me.insertDOM){ me.$element.append('<div class="'+me.opts.domDown.domClass+'"></div>'); me.insertDOM = true; } me.$domDown = $('.'+me.opts.domDown.domClass); fnTransition(me.$domDown,0); // 上拉 if(_absMoveY <= me.opts.distance){ me._offsetY = _absMoveY; me.$domDown.html('').append(me.opts.domDown.domRefresh); // 指定距離 < 上拉距離 < 指定距離*2 }else if(_absMoveY > me.opts.distance && _absMoveY <= me.opts.distance*2){ me._offsetY = me.opts.distance+(_absMoveY-me.opts.distance)*0.5; me.$domDown.html('').append(me.opts.domDown.domUpdate); // 上拉距離 > 指定距離*2 }else{ me._offsetY = me.opts.distance+me.opts.distance*0.5+(_absMoveY-me.opts.distance*2)*0.2; } me.$domDown.css({'height': me._offsetY}); me.$scrollArea.scrollTop(me._offsetY+me._scrollTop); } } // touchend function fnTouchend(me){ var _absMoveY = Math.abs(me._moveY); if(me.insertDOM){ if(me.direction == 'down'){ me.$domResult = me.$domUp; me.domLoad = me.opts.domUp.domLoad; }else if(me.direction == 'up'){ me.$domResult = me.$domDown; me.domLoad = me.opts.domDown.domLoad; } fnTransition(me.$domResult,300); if(_absMoveY > me.opts.distance){ me.$domResult.css({'height':me.$domResult.children().height()}); me.$domResult.html('').append(me.domLoad); fnCallback(me); }else{ me.$domResult.css({'height':'0'}).on('webkitTransitionEnd',function(){ me.insertDOM = false; $(this).remove(); }); } me._moveY = 0; } } // 回撥 function fnCallback(me){ me.loading = true; if(me.opts.loadUpFn != '' && me.direction == 'down'){ me.opts.loadUpFn(me); }else if(me.opts.loadDownFn != '' && me.direction == 'up'){ me.opts.loadDownFn(me); } } // 鎖定 MyDropLoad.prototype.lock = function(){ var me = this; me.isLock = true; }; // 解鎖 MyDropLoad.prototype.unlock = function(){ var me = this; me.isLock = false; }; // 重置 MyDropLoad.prototype.resetload = function(){ var me = this; if(!!me.$domResult){ me.$domResult.css({'height':'0'}).on('webkitTransitionEnd',function(){ me.loading = false; me.insertDOM = false; $(this).remove(); }); } }; // css過渡 function fnTransition(dom,num){ dom.css({ '-webkit-transition':'all '+num+'ms', 'transition':'all '+num+'ms' }); } })(window.Zepto || window.jQuery);
// 呼叫js
// 下拉載入圖片
$('.good_intro').dropload({
    domUp : {
        domClass   : 'dropload-up',
domRefresh : '<div class="dropload-refresh">↓下拉重新整理</div>',
domUpdate  : '<div class="dropload-update">↑釋放更新</div>',
domLoad    : '<div class="dropload-load"><span class="loading"></span>載入中...</div>'
},
loadDownFn : function(me){
        if($.trim($('#details').html())==null||$.trim($('#details').html())=='') {
            var url = "../picture/" + $("#productId").val() + ".html";
$.ajax({
                type: 'GET',
url: url,
success: function (data) {
                    if (null == data || data.length <= 0) {
                        me.resetload();
return;
} else {

                        // 測試效果
setTimeout(function () {
                            $('#details').html(data.mobileDesc);
me.resetload();
}, 1000);
}
                },
error: function (xhr, type) {
                    alert('Ajax error!');
me.resetload();
}
            });
}else{
            me.resetload();
}
    }
});

相關推薦

jquery 重新整理 載入

/** * Created by Administrator on 2015/11/20. */ // 需要引入 zepto.min.js 檔案 // dropload.js 檔案內容 ;(function($){ 'use strict'; var $win

react native自定義實現重新整理載入

1·定義元件 PageListView.js  /** * 上拉重新整理/下拉載入更多 元件 */ import React, { Component } from 'react'; import { Text, View, ListView, FlatList

mui 重新整理 載入

轉自http://ask.dcloud.net.cn/question/1247 動態禁止和恢復上下拉重新整理 留著做個demo 需要暫時禁止和恢復上下拉重新整理,我的初始化程式碼如下: mui.init({ styles: { top: ‘42px’, //子頁面頂部位置

android重新整理,載入更多

public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerview; private ArrayList<Integer> mList = new ArrayL

Android打造 ListView GridView等 通用的重新整理 自動載入的元件

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

vue-scroller的使用 實現重新整理 載入初始效果

安裝vue-scroller npm i vue-scroller -D 在main.js中: import VueScroller from 'vue-scroller' Vue.use(VueScroller) &nbs

重新整理載入框架:android-Ultra-Pull-To-Refresh

下拉重新整理上拉載入框架:PtrClassicFrameLayout 1、一個優雅的框架實現下拉重新整理上拉載入,學習來源:點選開啟連結 2、如何使用: 2.1、在專案中引入: compile 'com.shizhefei:MVCHelper-UltraRefresh:1

好用的重新整理 載入 框架 SmartRefreshLayout

特點功能:  簡單用例 1.在 build.gradle 中新增依賴 支援多點觸控 支援淘寶二樓和二級重新整理 支援巢狀多層的檢視結構 Layout (LinearLayout,FrameLayout...) 支援所有的 View(AbsListView

Refresh+LoadMore重新整理 載入更多

匯入有關的library庫 XListViewFlush import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import

MUI重新整理載入實現

DOM結構 <div id="refreshContainer" class="mui-content mui-scroll-wrapper"> <div class="hui-media-list mui-scroll"> <u

Flutter之封裝一個重新整理載入的listview

封裝一個簡單的listview,下拉重新整理上拉載入 Getting Started 1.需求場景 在開發的過程中,經常要用到一個具有下拉重新整理和上拉載入更多功能的listview ,程式碼的實現思路基本是差不多的。所以有必要封裝一個通用的listview,方便使用。 2.需要用到

Android中ListView重新整理載入更多效果實現

  在Android開發中,下拉重新整理和上拉載入更多在很多app中都會有用到,下面就是具體的實現的方法。 首先,我們自定義一個RefreshListView來繼承與ListView,下面是程式碼: package com.example.downrefresh; import

Android 列表重新整理載入更多分頁功能

手機app 列表頁很常用,當資料特別多的時候,為了更好地使用者體驗,需要進行分頁處理。那麼分頁功能怎麼做呢? 看如下核心程式碼 if (mPage == 1 && mList != null) { mList.clear();

PullToRefresh 重新整理 載入

先匯入library包 //listView監聽 上拉載入 下拉重新整理 listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override p

重新整理載入

import React, { Component } from "react"; import { withNavigation } from "react-navigation"; import RefreshListView, { RefreshState } f

PullTo重新整理載入+多條目檢視專項練習一()

PullTo下拉重新整理上拉載入 private int type = 0; private int page = 0; List<NewsBean.NewslistBean> list; private PullToRefreshListView

Android 重新整理載入PullToRefresh

PullToRefresh 開發者可以使用 PullToRefresh 對各種控制元件實現下拉重新整理或者上拉載入以及可以自定義重新整理和載入部分的檢視。 目前支援:ScrollView,ListView,WebView,RecyclerView。 PullToRefresh的使用步驟

TP5+小程式重新整理載入更多

網上看了好多,我也參考了好多,不過總結了大家的經驗還是做出來了,前提是你有了小程式的基礎,廢話不多說。我這裡是tp5+小程式的,先上預覽圖,因為是PC端測試,拍不成高清圖,講究看一下: 上拉載入更多下拉重新整理前端wxml程式碼: <view class="page

Banner+自定義View+SmartRefreshLayout重新整理載入更多

仿美團開源專案整體架構和首頁其實早就完成了,前段時間家裡各種事情搞得心力交瘁,停更了一段時間。甚至一度動搖繼續這個專案的決心,因為最近在學前端,在技術的深度和廣度之間一直糾結搖擺不定。一個聲音是繼續完成這個專案,把安卓玩的更深入一些;另一個聲音是趕緊學前端吧

iOS開發-ios7重新整理 載入快速整合

                在ios7之前,一直在使用開源的EGO庫。但是,在使用過程中發現,普遍封裝得過於複雜、耦合性強,不利於整合到自己的專案中。另外,在ios7之後,一些原有的下拉重新整理,上提載入控制元件表現的就不是那麼出色了。除了可能出錯外,也不符合扁平化的風格。後來,在code4App上發現了