ホームページ  >  記事  >  ウェブフロントエンド  >  jquery での $.fn と画像スクロール効果の実装の紹介

jquery での $.fn と画像スクロール効果の実装の紹介

不言
不言オリジナル
2018-07-02 15:08:491924ブラウズ

この記事では、jquery での $.fn と画像スクロール効果の実装を主に紹介します。必要な友達はそれを参考にしてください。

画像スクロールこの効果は誰もがよく知っていると思います。Bad Street のレンダリングは非常に短いですが、これを実行するには、jquery、IIFE、setInterval、$.fn の基本を習得する必要があります。使用法:


jquery での $.fn の使用法

$.fn は、jquery のソースコードを学習したことがあれば、難しくありません。ソース コード内で次のコードを見つけます:

jquery.fn=jquery.prototype={
 init:function(selector,context){
 /*
 *code
 */
 }
}

$.fn是jquery的命名空间,如果对jquery源码有过学习,就不难发现源码中有如下代码:

jQuery = function( selector, context ) {
 //jqeruy内部使用new创建返回另一个构造函数实力是为了省去调用jquery时前面的new,并在后面定义了别名$;
 //构造函数jquery()调用的是构造函数jQuery.fn.init()的实例
 return new jQuery.fn.init( selector, context );
},/*code*/

所以说jquery.fn也就是jquery.prototype的简写。我们的源码调用的构造函数jquery()实例实际是jquery.fn.init()的实例。

代码如下:

$.extent({ 
 add: function(a,b){
 return a+b;
 }
})

之后后续代码有执行了jquery.fn.init.prototype=jquery.fn,用构造函数jquery的原型对象覆盖jquery.fn.init()的原型对象,使得jquery.fn.init实例也能访问到jquery()的原型方法和属性。

开发插件的方法:$.fn扩展jquery生成新的方法。

      1、可以使用jquery.extend(object)扩展jquery类本身,为类添加新的方法。

      2、用jquery.fn.extend(object)给jquery对象添加方法。

下面用jquery.extend(object)扩展jquery类,添加类方法:

$.fn.extend({
 [函数名]:fucntion(){
 /*code*/
 }
});

以后就可以直接使用$.add(1,2);//3

下面用jquery.fn.extend(object)jquery.prototype扩展一个方法。

setInterval(fucntion(){/*code*/},[time])
clearInterval(val_of_seInterval)//参数为setInterval的返回值

以后可以直接使用$(“p”).函数名()。

使用jquery中的$.fn封装一个图片滚动插件

这是一个使用到烂大街的一个插件了,不用说也知道是什么。不过具体是怎么实现的,继续往下看。这个插件最主要的部分也就是js的实现,html和css很简单,不赘述。如果下面一些知识点已经熟悉,可以选择性跳过。

setInterval()

setInterval()可以按指定时间不停的调用函数,直到调用clearInterval或者关闭窗口。

var time=setInterval(picTime,par.time);
/*
*code
*/
$(this).on('mouseup,mouseover',fucntion(){
 clearInterval(time);
 })

所以当我们制作图片滚动时,当鼠标指针在图片上时,要停止图片滚动,这里设置很简单,只要添加一个on(‘mouseup,mouseover',fucntion(){})事件即可;

具体实现代码如下:

var index=0;
fucntion picTime(){
 index++;
 if(index=li.length){
 index=0;
 }
 showpicture(index);
}

保证图片能够一直循环滚动

在设计时,我们肯定不想图片滚动完li.length

つまり、jquery.fnjquery.prototype の省略形です。ソース コードによって呼び出されるコンストラクター jquery() インスタンスは、実際には jquery.fn.init() のインスタンスです。

コードは次のとおりです:

(function(){}());
(function(){})();
その後、後続のコードが実行されます jquery.fn.init.prototype=jquery.fn と、コンストラクター jquery は を上書きするために使用されます。 jquery.fn.init() のプロトタイプ オブジェクトにより、jquery.fn.init インスタンスが のプロトタイプ メソッドとプロパティにもアクセスできるようになります。 jquery()


プラグインの開発方法:

$.fn を使用して jquery を拡張し、新しいメソッドを生成します。

1. jquery.extend(object) を使用して、jquery クラス自体を拡張し、クラスに新しいメソッドを追加できます。

2. jquery.fn.extend(object) を使用して、jquery オブジェクトにメソッドを追加します。

次に、jquery.extend(object) を使用して jquery クラスを拡張し、クラス メソッドを追加します:

var myObject = { 
 foo: "bar", 
 func: function() { 
 var self = this; 
 console.log(this.foo); 
 console.log(self.foo); 
 (function() { 
 console.log(this.foo); 
 console.log(self.foo); 
 }()); 
}};
 myObject.func();

$.add(1,2) を使用できます。 ) 将来的には直接; //3

以下では、jquery.fn.extend(object) を使用してメソッドを jquery.prototype に拡張します。

//$()调用jquery对象 ,IIFE
$(function () {
 $.fn.ScrollPic = function (params) {
 //
 return this.each(function () {
 var defaults = {
 ele: '.slider',//切换对象
 Time: '2000',//自动切换时间
 speed: '1000',//图片切换速度
 scroll: true,//是否滚动图片,虽然肯定是让它滚动的,但是我们还是设置一个意思一下。
 arrow: false,//是否设置箭头
 number: true//是否添加右下角数字
 };
 //定义默认参数,其中若在html页面设置了param是,这里的params会替换defaults
 var par = $.extend({}, defaults, params);
 var scrollList = $(this).find('ul');//找到ul标签元素
 var listLi = $(this).find('li');//找到li标签元素
 var index = 0;
 var pWidth = $(this).width();
 var pHeight = $(this).height();
 var len = $(this).find("li").length;//<li>标签数量
 //设置li标签和img的宽、高
 listLi.css({ "width": pWidth, "height": pHeight });
 listLi.find(&#39;img&#39;).css({ "width": pWidth, "height": pHeight });
 //设置ul标签的宽值为li的len倍/overflow:hidden
 scrollList.css("width", pWidth * len);
 //图片循环滚动的关键所在
 function picTimer() {
 index++;
 if (index == len) { index = 0; }
 showPics(index);
 }
 //自动切换函数
 if (par.scroll)
 {
 var time = setInterval(picTimer, par.Time);
 } else {
 $(".page-btn").hide();
 }
 function showPics(index) {
 var nowLeft = -index * pWidth;
 //添加向左移动的特效
 $(this).find(scrollList).animate({ "left": nowLeft }, par.speed);
 //找到与index相等的那个按钮,添加类名current,并将每个同胞元素移除类名current
 $(this).find(paging).eq(index).addClass(&#39;current&#39;).siblings().removeClass(&#39;current&#39;);
 }
 //鼠标经过数字按钮的效果
 if (par.number) {
 $(this).append(&#39;<p class="page-btn"></p>&#39;);
 for (i = 1; i <= len; i++) {
 $(this).find(&#39;.page-btn&#39;).append(&#39;<span>&#39; + i + &#39;</span>&#39;)
 }
 var paging = $(this).find(".page-btn span");
 paging.eq(index).addClass(&#39;current&#39;);
 $(this).find(paging).on(&#39;mouseup mouseover&#39;,function (e) {
 e.preventDefault();
 //获取按钮之间的相对位置,注意这里的$(this)。
 index = $(&#39;p&#39;).find(paging).index($(this));
 showPics(index)
 });
 }
 //上一张,下一张效果
 if (par.arrow) {
 $(this).append(&#39;<span class="leftarrow"></span><span class="rightarrow"></span>&#39;)
 var prev = $(this).find(&#39;span.leftarrow&#39;);
 var next = $(this).find(&#39;span.rightarrow&#39;);
 prev.on(&#39;click&#39;,function (e){
 e.preventDefault();
 index -= 1;
 if (index == -1) { index = len - 1; }
 showPics(index);
 });//上一页
 next.on(&#39;click&#39;,function (e){
 e.preventDefault();
 index += 1;
 if (index == len) { index = 0; }
 showPics(index);
 });
 }
 //停止图片的滚动
 $(this).on(&#39;moveseup mouseover&#39;,function (e) {
 clearInterval(time);
 });
 //清除计时器
 $(this).on(&#39;mouseleave&#39;,function (e) {
 if (par.scroll) { time = setInterval(picTimer, par.Time); } else { clearInterval(time); $(this).find(&#39;$(".page-btn")&#39;).hide() }
 });
 })
}
});

将来的には、$(“p”).関数名() を直接使用できるようになります。

jqueryで$.fnを使用して画像スクロールプラグインをカプセル化します

🎜🎜これは言うまでもなく、広く使用されているプラ​​グインです。ただし、具体的にどのように実装するかについては、以下を読み続けてください。このプラグインの最も重要な部分は js の実装です。HTML と CSS は非常に単純なので、詳細は説明しません。以下の知識ポイントの一部をすでに理解している場合は、必要に応じてそれらをスキップできます。 🎜🎜🎜setInterval()🎜🎜🎜setInterval()は、clearIntervalが呼び出されるかウィンドウが閉じられるまで、指定された時間に従って関数を継続的に呼び出すことができます。 🎜🎜🎜rrreee🎜🎜🎜そこで、画像をスクロールするとき、マウスポインターが画像上にあるときに、画像のスクロールを停止したいのです。ここでの設定は非常に簡単で、on('mouseup,mouseover) を追加するだけです。 ',fucntion() {}) イベントで十分です 🎜🎜🎜 具体的な実装コードは次のとおりです: 🎜🎜🎜🎜rrreee🎜🎜🎜 設計時に、画像が常にループ内でスクロールできるようにします。 li length がなくなっているため、画像を最後までスクロールする必要はありません。そこでセンチネルインデックスを設定します。 🎜🎜🎜rrreee🎜🎜🎜 同様に、前または次の画像をクリックしたときに、ループを継続できるように監視を設定する必要もあります。 🎜🎜🎜🎜IIFE🎜🎜🎜🎜 定義内でプラグインが呼び出された後、ブラウザがロードされたときにプラグイン効果がすぐに表示されるようにしたいと考えています。次に、IIFE を使用してこのプラグインを構築し、高速な読み込みを実現し、他のコードの干渉を受けないようにする必要があります。 jsでは括弧内の関数宣言は無効となるため、括弧で囲まれた関数を関数式と呼びます。 🎜🎜🎜 IIFE の 2 つの形式は次のとおりです: 匿名関数の末尾に括弧があり、関数を呼び出したい場合、関数宣言としてデフォルトで関数が使用されます。括弧で関数を囲む場合、デフォルトでは関数宣言ではなく式として関数が解析されます。 🎜🎜🎜rrreee🎜🎜🎜 まず、IIFE を理解するために Niuke からの質問を使用しましょう: 🎜🎜🎜rrreee🎜🎜🎜 これは myObject オブジェクトを参照しているため、最初のオブジェクトは間違いなく bar を出力し、self は this です。変数は次と等しいです。したがって、2 番目の出力はまだ bar です。この時点では、この匿名関数は window を指しているため、最後の self は未定義です。独自のブロックレベルのスコープで定義されていないため、親スコープの self が上位に見つかり、4 番目の出力は bar のままです。 🎜🎜🎜🎜画像特殊効果 js コードの低構成バージョン🎜🎜🎜🎜その多くがコメントを追加しています: jquery と js のしっかりした知識があれば、決して難しくありません。 🎜🎜🎜rrreee🎜🎜🎜 以上がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。 🎜

関連する推奨事項:

jQuery はドラッグ可能な願いの壁効果を実現します

jQuery と Canvas は球の平らな投げと色の動的変形効果を実現します

JSON 形式のデータに基づくシンプルな jQuery スライドショー プラグイン ( jquery-slider の紹介

以上がjquery での $.fn と画像スクロール効果の実装の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。