js常用代碼工具封裝類整理,java常用工具類封裝

本文目錄一覽:

前端基本功:JS(十一)動畫封裝(CSS樣式獲取、JSON遍歷)

盒子 原來的位置 0 + 10 盒子現在的offsetLeft 10

|-5| = 5

這三個函數都是 數學函數

Math

比如說 console.log(Math.ceil(1.01)) 結果 是 2

console.log(Math.ceil(1.9)) 結果 2

console.log(Math.ceil(-1.3)) 結果 是 -1

比如說 console.log(Math.floor(1.01)) 結果 是 1

console.log(Math.floor(1.9)) 結果 1

console.log(Math.floor(-1.3)) 結果 是 -2

console.log(Math.round(1.01)) 結果 是 1

console.log(Math.round(1.9)) 結果 是 2

勻速動畫的原理: 盒子本身的位置 + 步長

緩動動畫的原理: 盒子本身的位置 + 步長 (不斷變化的)

( 缺陷:只能水平方向!隨後的“封裝運動框架單個屬性會進一步改進” )

我們訪問得到css 屬性,比較常用的有兩種:

點語法可以得到 width 屬性 和 top屬性 ** 帶有單位的 。 100px

但是這個語法有非常大的 缺陷**, 不變的。

後面的width 和 top 沒有辦法傳遞參數的。

var w = width;

box.style.w

最大的優點 : 可以給屬性傳遞參數

我們想要獲得css 的樣式, box.style.left 和 box.style.backgorundColor

但是它只能得到 行內的樣式。

但是我們工作最多用的是 內嵌式 或者 外鏈式 。

怎麼辦?

核心: 我們怎麼才能得到內嵌或者外鏈的樣式呢?

外部(使用link)和內嵌(使用style)樣式表中的樣式(ie和opera)

兩個選項是必須的, 沒有偽類 用 null 替代

我們這個元素裡面的屬性很多, left top width ===

我們想要某個屬性, 就應該 返回該屬性,所有繼續封裝 返回當前樣式的 函數。

千萬要記得 每個 的意思 : 那是相當重要

flag在js中一般作為開關,進行判斷。

等動畫執行完畢再去執行的函數 回調函數

我們怎麼知道動畫就執行完畢了呢?

很簡單 當定時器停止了。 動畫就結束了

案例源碼:

in運算符也是一個二元運算符,但是對運算符左右兩個操作數的要求比較嚴格。in運算符要求第1個(左邊的)操作數必須是字符串類型或可以轉換為字符串類型的其他類型,而第2個(右邊的)操作數必須是數組或對象。只有第1個操作數的值是第2個操作數的屬性名,才會返回true,否則返回false

案例源碼:

鏈接:

密碼:7fv8

.JS有哪些框架

目前來看,JS框架以及一些開發包和庫類有如下幾個,Dojo 、Scriptaculous 、Prototype 、yui-ext 、Jquery 、Mochikit、mootools 、moo.fx

Dojo (JS library and UI component ):

Dojo是目前最為強大的j s框架,它在自己的Wiki上給自己下了一個定義,dojo是一個用JavaScript編寫的開源的DHTML工具箱。dojo很想做一個“大一統”的 工具箱,不僅僅是瀏覽器層面的,野心還是很大的。Dojo包括ajax, browser, event, widget等跨瀏覽器API,包括了JS本身的語言擴展,以及各個方面的工具類庫,和比較完善的UI組件庫,也被廣泛 應用在很多項目中,他的UI組件的特點是通過給html標籤增加tag的方式進行擴展,而不是通過寫JS來生成,dojo的API模仿Java類庫的組織 方式。 用dojo寫Web OS可謂非常方便。dojo現在已經4.0了,dojo強大的地方在於界面和特效的封裝,可以讓開發者快速構建一些兼容標準的界面。

優點:庫相當完善,發展時間也比較長,功能強大,據說利用dojo的io.bind()可以實現comet,看見其功能強大非一般,得到IBM和SUN的支持

缺點:文件體積比較大,200多KB,初次下載相當慢,此外,dojo的類庫使用顯得不是那麼易用,j s語法增強方面不如prototype。

Prototype (JS OO library):

是一個非常優雅的JS庫,定義了JS的面向對象擴展,DOM操作API,事件等等,以prototype為核心,形成了一個外圍的各種各樣 的JS擴展庫,是相當有前途的JS底層框架,值得推薦,感覺也是現實中應用最廣的庫類(RoR集成的AJAX JS庫),之上還有 Scriptaculous 實現一些JS組件功能和效果。

優點:基本底層,易學易用,甚至是其他一些js特效開發包的底層,體積算是最小的了。

缺點:如果說缺點,可能就是功能是他的弱項

Scriptaculous (JS UI component based on prototype):

Scriptaculous是基於prototype.js框架的JS效果。包含了6個js文件,不同的文件對應不同的js效果,所以說,如果底層用 prototype的話,做js效果用Scriptaculous那是再合適不過的了,連大名鼎鼎的digg都在用他,可見不一般

優點:基於prototype是最大的優點,由於使用prototype的廣泛性,無疑對用戶書錦上添花,並且在《ajax in action》中就拿Scriptaculous來講述js效果

缺點:剛剛興起,需要時間的磨練

yui-ext (JS UI component):

基於Yahoo UI的擴展包yui-ext是具有CS風格的Web用戶界面組件 能實現複雜的Layout布局,界面效果可以和backbase媲美,而且使用純javascript代碼開發。真正的可編輯的表格Edit Grid,支持XML和Json數據類型,直接可以遷入grid。許多組件實現了對數據源的支持,例如動態的布局,可編輯的表格控件,動態加載的Tree 控件、動態拖拽效果等等。1.0 beta版開始同Jquery合作,推出基於jQuery的Ext 1.0,提供了更多有趣的功能。

優點:結構化,類似於java的結構,清晰明了,底層用到了Jquery的一些函數,使整合使用有了選擇,最重要的一點是界面太讓讓人震撼了。

缺點:太過複雜,整個界面的構造過於複雜。

Jquery :

jQuery是一款同prototype一樣優秀js開發庫類,特別是對css和XPath的支持,使我們寫js變得更加方便!如果你不是個js高手又想寫出優 秀的js效果,jQuery可以幫你達到目的!並且簡介的語法和高的效率一直是jQuery追求的目標,

優點:注重簡介和高效,js效果有yui-ext的選擇,因為yui-ext 重用了很多jQuery的函數

缺點:據說太嫩,歷史不悠久。

Mochikit :

MochiKit自稱為一個輕量級的js框架。MochiKit 主要受到 Python 和 Python 標準庫提供的很多便利之處的啟發,另外還緩解了瀏覽器版本之間的不一致性。其中的 MochiKit.DOM 尤其方便,能夠以比原始 JavaScript 更友好的方式處理 DOM 對象。MochiKit.DOM 大部分都是針對 XHTML 文檔定製的,如果與 MochiKit 和 Ajax 結合在一起,使用 XHTML 包裝的微格式尤其方便。Mochikit可以直接對字符串或者數字格式化輸出,比較實用和方便。它還有自己的 js 代碼解釋器

優點:MochiKit.DOM這部分很實用,簡介也是很突出的

缺點:輕量級的缺點

mootools :

MooTools是一個簡潔,模塊化,面向對象的JavaScript框架。它能夠幫助你更快,更簡單地編寫可擴展和兼容性強的JavaScript代碼。Mootools跟prototypejs相類似,語法幾乎一樣。但它提供的功能要比prototypejs多,而且更強大。比如增加了動畫特效、拖放操作等等。

優點:可以定製自己所需要的功能,可以說是prototypejs的增強版。

缺點:不大不小,具體應用具體分析

moo.fx :

moo.fx是一個超級輕量級的javascript特效庫(7k),能夠與prototype.js或mootools框架一起使用。它非常快、易於使用、跨瀏覽器、符合標準,提供控制和修改任何HTML元素的CSS屬性,包括顏色。它內置檢查器能夠防止用戶通過多次或瘋狂點擊來破壞效果。moo.fx整體採用模塊化設計,所以可以在它的基礎上開發你需要的任何特效。

優點:小塊頭有大能耐

缺點:這麼小了,已經不錯了

如何實現JS的封裝和JS封裝的好處

而且對於JS代碼,因為本身就是一出現是一大段,自然如果不封包起來通過調用的方式進行整理的話,直接放到網站源碼中,自然就會加大的源碼的體積,而且還會影響到代碼的美現。而且現在很多的殺毒軟件都把JS代碼誤報為病毒,況且JS代碼外露也很容易讓不良分子找到攻擊網站的參照物。JS封裝的好處:1、提高網站的打開速度。2、符合SEO搜索引擎思路。3、加大網站的曝光力度。所以,對於提高網站訪問速度,最好把JS代碼封包起來,而且還要通過ROBOT文件把之屏蔽掉,畢竟這些都是搜索引摯不能識別的,外放對於提高收錄只有壞外沒有好處,所以,為了收錄為了訪問速度能封裝的JS代碼就盡時封裝。

js代碼如何封裝

1. 定義js類 

js並不是一種面向對向的語言, 沒有提供對類的支持, 因此我們不能像在傳統的語言里那樣 用class來定義類, 但我們可以利用js的閉包封裝機制來實現js類, 我們來封裝一個簡的Shape類. 

代碼如下:

function ShapeBase() { 

    this.show = function(){ 

        alert(“ShapeBase show”); 

    }; 

    this.init = function(){ 

        alert(“ShapeBase init”); 

    }; 

}

這個類里定義了兩個方法:show和init, 需要注意的是這裡用到了this來聲明, 而不是var, 因為用var是用來定義私有方法的. 

另外, 我們還可以用prototype屬性來定義Shape的方法. 

代碼如下:

ShapeBase.prototype.show=function() 

    alert(“ShapeBase show”); 

ShapeBase.prototype.init=function() 

    alert(“ShapeBase init”); 

}

上面這種寫法看起來不太直觀,我們可以將所有的方法寫在一起. 

代碼如下:

ShapeBase.prototype={ 

    show:function(){ 

        alert(“ShapeBase show”); 

    }, 

    init:function() { 

        alert(“ShapeBase init”); 

    } 

};

現在, 類是寫好了, 讓我們寫個js來測試下, 看看結果是不是跟我們想象的一樣呢? 

代碼如下:

function test(src){ 

    var s=new ShapeBase(); 

    s.init(); 

    s.show(); 

}

看到了吧, 其調用方式和C#一模一樣, 而結果也如我們所料. 

到目前為止, 我們學會了如何創建js的類了, 但還只是實例方法,要是實現跟C#中的靜態方法要怎麼做呢? 

其實, 實現js的靜態方法很簡單, 看下面如何實現: 

代碼如下:

//靜態方法 

ShapeBase.StaticDraw = function() 

    alert(“method draw is static”); 

}

2. 實現JS類抽象和繼承 

同樣, js中也不支持類繼承機制,但我們可以通過將父類prototype中的成員方法複製到子類的prototype中來實現. 

和類的繼承一樣,JavaScript也沒有任何機制用於支持抽象類.但利用JavaScript語言本身的性質.可以實現自己的抽象類. 

首先來看看js中的虛方法, 在傳統語言中虛方法是要先定義的, 而包含虛方法的類就是抽象類,不能被實例化,而在JavaScript中,虛方法就可以看作該類中沒有定義的方法,但已經通過this指針使用了. 

和傳統面向對象不同的是,這裡虛方法不需經過聲明,而直接使用了, 並且類也可以被實例化. 

先定義object的extend方法, 一個為靜態方法,一個為實例方法, 這兩個方法用於實現繼承的prototype複製 

代碼如下:

Object.extend = function(destination, source) { 

    for (property in source) { 

    destination[property] = source[property]; 

    } 

    return destination; 

Object.prototype.extend = function(object) { 

    return Object.extend.apply(this, [this, object]); 

}

接下來我們實現一個繼承類Rect, 這裡先用一種簡單的方法來實現。 

代碼如下:

function Rect() { } 

Rect.prototype = ShapeBase.prototype; //只這一句就行了 

//擴充新的方法 

Rect.prototype.add=function() { 

    alert(“Rect add”); 

}

這種方法不能用於重寫,如果改變了show方法, ShapeBase的show也會指向同一函數可能是由於prototype賦值只是簡單的改變指向地址. 

如果上面也定義了: 

Rect.prototype.show=function() { 

    alert(“Rect show”); 

}

那麼執行結果如下: 

function test(){ 

    var s=new ShapeBase(); 

    s.show(); //結果:Rect show 

    var r=new Rect(); 

    r.show(); //結果:Rect show 

    r.add(); 

}

我們再使用object.extend實現繼承, 並實現一個oninit虛方法, 修改ShapeBase如下: 

代碼如下:

ShapeBase.prototype={ 

    show:function() 

    { 

        alert(“ShapeBase show”); 

    }, 

    initialize:function () { 

        this.oninit(); 

    } 

};

實現Rect類繼承. 

代碼如下:

Rect.prototype=(new ShapeBase).extend({ 

  //添加新的方法 

  add:function() { 

    alert(“Rect add”); 

    }, 

    //使用這種方法可以重寫show方法 

    show:function() { 

        alert(“Rect show”); 

    }, 

    //實現虛方法 

    oninit:function() { 

    alert(“Rect oninit”); 

    } 

})

新手請教,如何將一段JS代碼封裝成一個方法

鑒於樓主欠缺編程經驗,我就先不說封裝成jQuery插件等高大上的做法了。單就論封裝成方法而言。

方法,也就是函數。是面向過程式語言一種代碼復用的初級手段,簡而言之,就是把重複的部分用函數封裝起來。

例如貓叫多遍,cat.meow(), 你總不可能寫對應次數的代碼,一般會寫成:

function meow(num){

    for(var i=0;inum;i++){

        cat.meow()

    }

}

meow(1000)

這就是一種最基礎的代碼復用。

當然,面向對象的語言也許有更簡單的 cat.meow(1000)

那麼,針對樓主的情況。逐步講一下各層次的方法。最簡單的用函數封裝一下就是:

function effect(srcDom,destDom,className){

    $(srcDom).mouseenter(function(){

        $(destDom).addClass(className)

    }).mouseout(function(){

        $(destDom).removeClass(className)

    })

}

然後調用

effect(‘#plate-1′,’#plate-1hover’,’plate-1after’)

effect(‘#plate-2′,’#plate-2hover’,’plate-2after’)

effect(‘#plate-3′,’#plate-3hover’,’plate-3after’)

鑒於樓主的DOM的ID和Class命名比較有規律,可以寫成這樣

function effect(name){

    $(‘#’+name).mouseenter(function(){

        $(‘#’+name+’hover’).addClass(name+’after’)

    }).mouseout(function(){

        $(‘#’+name+’hover’).removeClass(name+’after’)

    })

}

然後調用

effect(‘plate-1’)

effect(‘plate-2’)

effect(‘plate-3’)

但是這樣還是不夠通用,樓主應該看看事件方面有關事件委託的知識

js有哪些內置的數據封裝類對象

1.JavaScript核心語言定義:包括數據類型,變量,常量,運算符,語句等.

2.原生對象和內置對象

3.瀏覽器對象BOM

4.文檔對象類型DOM

5.事件處理模型

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/183741.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-25 05:51
下一篇 2024-11-25 05:52

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29

發表回復

登錄後才能評論