1. 程式人生 > >側邊欄導航(移動端商品--評論--詳情)隨樓層滑動高亮顯示

側邊欄導航(移動端商品--評論--詳情)隨樓層滑動高亮顯示

接觸前端一年時間,開始還能感覺到自己的進步,隨著時間的推移,開始不知道方向。因為各種前端的框架和外掛在網上都能夠找到現成的,直接下載下來用就好了。

從來不考慮其中的實現原理什麼的,即便是去看了其中的原始碼,也是知其然而不知其所以然。舉一個簡單的例子:去年聖誕公司要求頁面上要有雪花飄落的效果,當時的第一想法,就是canvas繪圖製作這個動畫(必定培訓的時候學的飛機大戰有類似的效果),後來發現很難實現,於是就在網上找了一個jquery.snow.js的外掛,發現原理很簡單,

(一個div中加入html的雪花----設定初始的css----執行從上到下的飄落動畫同時雪花在過程中透明----動畫完成移除該div),克隆多個div執行前邊的過程,看著是不是很簡單。

我當時也這麼認為,於是我就自己仿著做了一個(當時自己認為),其實就是照個抄了一遍,加了一點自己需要的功能(例如:隨機雪花的顏色),然後我就認為這是自己的,在jquery的外掛網站去釋出,結果被拒絕了,我當時很失望但是沒有找自己的原因(因為那是抄的),後來也寫了一些輪播,導航點選頁面滑動等(自己認為的外掛),後來發現可複用性的很差,沒有起到外掛的作用。通過看別人的,學習了一段時間,才決定再次寫一個,檢驗一下。


# 1.extend擴充套件方法

- iquery的extend方法,這是jquery外掛常用的擴充套件方法方法,將外掛的預設引數和使用者自定義引數合併為一個新引數的物件。

var defaults = {
	floorClass : '.scroll-floor',
	navClass : '.scroll-nav',
	activeClass : 'active',
	activeTop : 100,
	scrollTop : 100,
	delayTime : 200
};
var newOptions = $.extend({}, defaults, options);

# 2.建立'獲取每個樓層的jquery物件,以及該樓層滑動到視窗某位置導航高亮的TOP值,點選導航頁面對應樓層滑動到視窗的某位置的TOP值'的函式

function getItem(_list,newOptions){
	_list.each(function() {
        var item = {};
        item.$obj = $body.find(this);
        item.$activeTop = $body.find(this).offset().top - newOptions.activeTop;
        item.$scrollTop = $body.find(this).offset().top + newOptions.scrollTop;
        
        data.push(item);
    });
}

# 3.建立'滾動監聽函式,同時啟用側邊欄導航高亮顯示'的函式

function scrollActive(_list,newOptions){
	var nowScrollTop = $(window).scrollTop();
	$.each(data,function(i,item){
		if(nowScrollTop > item.$activeTop){
			_list.removeClass(newOptions.activeClass).eq(i).addClass(newOptions.activeClass);
		}
	});
}

# 4.建立'點選啟用側邊欄導航高亮顯示'的函式

function clickActive(_index,newOptions){
	$('html,body').animate({'scrollTop' : data[_index].$scrollTop},newOptions.delayTime);
}

# 5.外掛介面的製作

var scroll_floor = window.scrollFloor = function(options){
	var newOptions = $.extend({}, defaults, options);
	var floorList = $body.find(newOptions.floorClass),navList = $body.find(newOptions.navClass);
	
	getItem(floorList,newOptions);
	scrollActive(navList,newOptions);
	
    $(window).bind('scroll',function(){scrollActive(navList,newOptions);});
    navList.bind('click',function(){
        var _index = $body.find(this).index();
        clickActive(_index,newOptions);
    });
}

# 6.完整外掛的程式碼

(function(window){
	var defaults = {
		floorClass : '.scroll-floor',
		navClass : '.scroll-nav',
		activeClass : 'active',
		activeTop : 100,
		scrollTop : 100,
		delayTime : 200
	};
	
	var $body = $('body'),data = [];
	function getItem(_list,newOptions){
		_list.each(function() {
            var item = {};
            item.$obj = $body.find(this);
            item.$activeTop = $body.find(this).offset().top - newOptions.activeTop;
            item.$scrollTop = $body.find(this).offset().top + newOptions.scrollTop;
            
            data.push(item);
        });
	}
	
	function scrollActive(_list,newOptions){
		var nowScrollTop = $(window).scrollTop();
		$.each(data,function(i,item){
			if(nowScrollTop > item.$activeTop){
				_list.removeClass(newOptions.activeClass).eq(i).addClass(newOptions.activeClass);
			}
		});
	}
	
	function clickActive(_index,newOptions){
    	$('html,body').animate({'scrollTop' : data[_index].$scrollTop},newOptions.delayTime);
    }
	
	var scroll_floor = window.scrollFloor = function(options){
		var newOptions = $.extend({}, defaults, options);
		var floorList = $body.find(newOptions.floorClass),navList = $body.find(newOptions.navClass);
		
		getItem(floorList,newOptions);
		scrollActive(navList,newOptions);
		
        $(window).bind('scroll',function(){scrollActive(navList,newOptions);});
        navList.bind('click',function(){
            var _index = $body.find(this).index();
            clickActive(_index,newOptions);
        });
	}
})(window);

# 7.總結
該外掛參考了會找人web端首頁動畫的js,就是先將所有樓層查找出來,然後將其需要的各個引數放入一個物件,滾動的監聽的時候對該陣列迴圈比對的思路。
思路對一個外掛的製作很重要,就像我開始第一次製作這個外掛的時候,就是將所有樓層的引數放到一個數組,然後對各個區間判斷,這樣就會使問題複雜話,同時還不好控制。
程式設計師的思路很重要,最開始可以很死板的按照步驟來,但是當我們慢慢的進化,就需要不斷的對程式碼優化,每次優化都是一次學習,慢慢的不知不覺就會發現原來你會的雪萊越多。
例如:

if(nowScrollTop > item.$activeTop){
	_list.removeClass(newOptions.activeClass).eq(i).addClass(newOptions.activeClass);
}

替換為:

nowScrollTop > item.$activeTop&&_list.removeClass(newOptions.activeClass).eq(i).addClass(newOptions.activeClass);

開始都一樣,但是它培養了我們寫程式碼的習慣,越寫越簡單。不對的地方敬請指正!!!

類似京東(商品----詳情----評論)頁面

wap效果圖:

下載wap的demo:

類似京東首頁樓層

web效果圖:

下載web的demo:

其他

[我的部落格,歡迎交流!](http://rattenking.gitee.io/stone/index.html)

[我的CSDN部落格,歡迎交流!](https://blog.csdn.net/m0_38082783)

[微信小程式專欄](https://blog.csdn.net/column/details/18335.html)

[前端筆記專欄](https://blog.csdn.net/column/details/18321.html)

[微信小程式實現部分高德地圖功能的DEMO下載](http://download.csdn.net/download/m0_38082783/10244082)

[微信小程式實現MUI的部分效果的DEMO下載](http://download.csdn.net/download/m0_38082783/10196944)

[微信小程式實現MUI的GIT專案地址](https://github.com/Rattenking/WXTUI-DEMO)

[微信小程式例項列表](http://blog.csdn.net/m0_38082783/article/details/78853722)

[前端筆記列表](http://blog.csdn.net/m0_38082783/article/details/79208205)

[遊戲列表](http://blog.csdn.net/m0_38082783/article/details/79035621)

相關推薦

導航(移動商品--評論--詳情)樓層滑動顯示

接觸前端一年時間,開始還能感覺到自己的進步,隨著時間的推移,開始不知道方向。因為各種前端的框架和外掛在網上都能夠找到現成的,直接下載下來用就好了。 從來不考慮其中的實現原理什麼的,即便是去看了其中的原始碼,也是知其然而不知其所以然。舉一個簡單的例子:去年聖誕公司要求頁面

Bootstrap 導航

div post hang gpo 側邊欄 article png inf class http://blog.csdn.net/shangmingchao/article/details/49763351 實測效果圖: Bootstrap 側邊欄 導航欄

vue導航,右側顯示對應內容

最終效果 點選下一個導航,上一個導航自動收回 實現程式碼 1.下載vue-router npm install vue-router --save-dev 2.在main.js中引入 import Vue from 'vue' import Router from 'vue

ecshop文章導航,自動呼叫文章多級子欄目分類並且當前欄目及父欄目顯示

效果圖 介紹: 一,比如訪問ecshop的國內新聞(上圖沒顯示),及子分類,如山東新聞,臨沂新聞,上海新聞等,都會自動顯示上圖所示的側導航條. 二,另外,如果我訪問子導航,比如居民小區,則平涼新聞的兄弟欄目,父欄目,子欄目,都可以自由設定高亮顯示.而山東新聞及其子欄

【CSS】簡易的頁面導航

演示地址:點我 測試程式碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="

封裝Activity基類++導航+輪播圖+Async網路請求+Gson解析+多個ViewPage與Fragment=首頁面

1.導包+依賴+Xlistview外掛 compile 'com.google.code.gson:gson:2.2.4'    <uses-permission android:name="android.permission.WRITE_EXTERNAL_

基於slideout.js實現的移動滑動特效

HTML5現在本領太大了,PC端已經無法滿足它的胃口了,它將強勢攻入移動端,所以移動端中各種特效也得基於HTML5實現,看看我們將要介紹的slideout.js,能幫我們實現怎麼樣的側邊欄滑動特效呢~~ 先看下執行效果: 一、準備資料 只需要準備s

ecshop 前臺個人中心修改顯示不全 或 導航現實不全

page alt keyword list() com ade 模板 pla uid 怎麽給個人中心側邊欄加項或者減項 在模板文件default/user_menu.lbi 文件裏添加或者修改,一般看到頁面都會知道怎麽加,怎麽刪,這裏就不啰嗦了 添加一個欄目以

使用autoc js生成文章目錄(導航

獨立 gpo blog sele 支持 ati log type fix 介紹:   autocjs 是一個專門用來生成文章目錄(Table of Contents)導航的工具。autocjs 會查找文章指定區域中的所有 h1~h6 的標簽,並自動分析文章的層次結構,生成文

原創文章:使用Jquery+Bootstrap完成導航,以及內容頁的切換的功能

用jquery,Bootstrap完成導航欄,側邊欄,以及內容頁的切換的功能,大家必須有html,css,js的基礎,不然案例中的程式碼可能看起來比較吃力,站長先讓大家看效果: html部分程式碼如下: <!DOCTYPE html>

Android系統定製的導航

Android手機的導航欄一般都放在底部,導航按鍵包括返回鍵、home鍵、最近任務鍵。而有些Android裝置希望把導航欄放在左右兩邊,也就是改成側邊欄,這時候就需要二次定製開發。首先,把原生的底部導航欄遮蔽掉。然後,通過WindowManager新增懸浮的側邊欄,組合按鍵除

Android學習筆記(四)之碎片化Fragment實現仿人人客戶

    其實一種好的UI佈局,可以使使用者感到更加的親切與方便。最近非常流行的莫過於側邊欄了,其實我也做過很多側邊欄的應用,但是那些側邊欄的使用我都不是很滿意,現在重新整理,重新寫了一個相對來說我比較滿意的側邊欄,其中運用的就是android3.0版本之後新加的Fragme

jquery實現手風琴三級導航選單demo

jquery實現側邊欄手風琴三級導航選單 效果圖: 引入檔案,font-awesome為字型庫檔案: <link rel="stylesheet" type="text/css" href="Font-Awesome-3.2.1/css/font-aweso

手機

這幾天雯雯木研究了手機端的側邊欄,和大家分享下,廢話不多說了,上程式碼。  1,頭部引入: <link rel="stylesheet" href="css/drawer.min.css"> <script src="js/jquery.min.js"&g

ionic字母導航

        $scope.show = function (c) {             var y = 0;             for (var i = 0; i < $scope.items.length; i++) {              

js 分享到

htm func line target 判斷 rip mouse get pad <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/

WordPress主題開發實例:利用工具顯示聯系方式

des dynamic class cat ons eba 廈門市 wordpress .com 利用側邊欄顯示聯系方式是很方便的 一、先開啟側邊欄工具,在functions.php加上 $args = array( ‘name‘ =

自定義video控制移動可行

ima http請求 ret 需要 max -m etc ssi pau <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>預覽頁

WordPress窗體化

什麽 拖拉 bar deb 整理 教程 不用 wid pre 窗體化側邊欄是一個支持 Widget 的側邊欄或者說是窗體化(widgetized)的側邊欄幾乎是 WordPress 主題的標準。 首先,什麽是窗體化(widgetizing)呢?簡單的說,窗體化就是能夠通過拖

改成圖標樣式

arrow color 菜單 cnblogs 需求 綁定 :hover display alt 需求如下: 將左側的菜單樣式改成右側的樣式,頁面左下角有一個箭頭,可以來回切換。 首先,先找到代碼,將箭頭添加上,樣式也要相應的加上,接下來就是綁定點擊事件。 我的思路是:寫上