ホームページ > ウェブフロントエンド > htmlチュートリアル > 特定のコントロールの下で、ドロップダウン ボックスに垂直スクロール バーを追加します。 _html/css_WEB-ITnose

特定のコントロールの下で、ドロップダウン ボックスに垂直スクロール バーを追加します。 _html/css_WEB-ITnose

WBOY
リリース: 2016-06-24 11:58:01
オリジナル
2225 人が閲覧しました

エビさんへ: 長い間プログラミングをしていなかったので、少し難しい問題が発生しました。よろしくお願いします。
1. 下のドロップダウン ボックスに垂直スクロール バーを追加し、ドロップダウン ボックスの高さを 500 ピクセルに制御する方法
ありがとう、エビさん。
プログラムのソースコードは以下の通りです:
part1:


新しいドキュメント






<ボディ>
<スクリプト>
/*
* EASYDROPDOWN - スタイル可能な入力とメニュー用のドロップダウン ビルダー
* バージョン: 2.1.3
* ライセンス: クリエイティブ コモンズ表示 3.0 非移植 - CC BY 3.0
* http://creativecommons.org/licenses/by /3.0/
* このソフトウェアは、作者/著作権者に帰属した上で、商業および非営利のプロジェクトで自由に使用できます。
* 著者: Patrick Kunka
* Copyright 2013 Patrick Kunka, All Rights Reserved
*/


(function($){

function EasyDropDown(){
this.isField = true,
this. down = false、
this.inFocus = false、
this.disabled = false、
this.cutOff = false、
this.hasLabel = false、
this.keyboardMode = false、
this.nativeTouch = true、
this.wrapperClass = 'ドロップダウン'、
this.onChange = null;

};

EasyDropDown.prototype = {
コンストラクター: EasyDropDown,
インスタンス: [],
init: function(domNode, settings){
var self = this; $.extend (self, 設定);
self.$select = $(domNode);
self.options = self.$select.find('option' );
self.isTouch = 'ontouchend' ドキュメント内;
self.$select.removeClass(self.wrapperClass+'dropdown');
self.disabled = true;
};
if(self.$options.length){
self.$options.each(function(i){
var $option = $(this);
if($option.is(': selected')){
self.selected = {
index: i,
title: $option.text()
}
self.focusIndex = i;
};
if($option.hasClass('label') && i == 0){
self.hasLabel = true;
self.label = $option.text();
$option.attr('値','');
} else {
self.options.push({
domNode: $option[0],
title: $option.text(),
value: $option.val(),
selected: $option.is(' :選択済み')
});
};
});
if(!self.selected){
self.selected = {
インデックス: 0,
title: self.$options.eq(0).text()
}
self.focusIndex = 0;
};
self.render();
};
},

render: function(){
var self = this,
touchClass = self.isTouch && self.nativeTouch ? ' touch' : '',
disabledClass = self.disabled ? ' disabled' : '';

self.$container = self.$select.wrap('
').parent().parent();
self.$active = $(''+self.selected.title+'').appendTo(self.$container);
self.$carat = $('').appendTo(self.$container);
self.$scrollWrapper = $('
    ').appendTo(self.$container);
    self.$dropDown = self.$scrollWrapper.find('ul');
    self.$form = self.$container.closest('form');
    $.each(self.options, function(){
    var option = this,
    active = option.selected ? ' class="active"':'';
    self.$dropDown.append(''+option.title+'');
    });
    self.$items = self.$dropDown.find('li');
    self.maxHeight = 0;
    if(self.cutOff && self.$items.length > self.cutOff)self.$container.addClass('scrollable');
    for(i = 0; i < self.$items.length; i++){
    var $item = self.$items.eq(i);
    self.maxHeight += $item.outerHeight();
    if(self.cutOff == i+1){
    ブレーク;
    };
    };

    if(self.isTouch && self.nativeTouch){
    self.bindTouchHandlers();
    } else {
    self.bindHandlers();
    };
    },

    bindTouchHandlers: function(){
    var self = this;
    self.$container.on('click.easyDropDown',function(){

    self.$select.focus();
    });
    self.$select.on({
    change: function(){
    var $selected = $(this).find('option:selected'),
    title = $selected.text(),
    value = $selected .val();

    self.$active.text(title);
    if(typeof self.onChange === '関数'){
    self.onChange.call(self.$select[0],{
    title : title,
    value: value
    });
    },
    focus: function(){
    self.$container.addClass('focus')
    },
    Blur: function(){
    self. $container.removeClass('フォーカス');
    },

    bindHandlers: function(){
    var self = this;
    self.query = '';
    self.$container.on({
    'click.easyDropDown': function(){

    if(!self.down && !self.disabled){
    self.open();
    } else {
    self.close ();
    }
    },
    'mousemove.easyDropDown': function(){
    if(self.keyboardMode){
    }
    });

    $('body').on('click.easyDropDown.'+self.id,function(e){
    var $target = $(e.target),
    classNames = self.wrapperClass.split(' ' ).join('.');

    if(!$target.closest('.'+classNames).length && self.down){
    self.close()
    });

    self.$items.on({
    'click.easyDropDown': function(){
    var index = $(this).index();
    self.select(index);
    self.$select.focus( );
    },
    'mouseover.easyDropDown': function(){
    if(!self.keyboardMode){
    var $t = $(this);
    $t.addClass('focus').siblings(); RemoveClass('focus');
    self.focusIndex = $t.index();
    },
    'mouseout.easyDropDown': function(){
    if(!self.keyboardMode){
    $(this) .removeClass('フォーカス');

    self.$select.on({
    'focus.easyDropDown': function(){

    self.$container.addClass('focus');
    self.inFocus = true;
    },
    'blur.easyDropDown ': function(){
    self.$container.removeClass('focus');
    self.inFocus = false
    }, 'keydown.easyDropDown': function(e){
    if(self.inFocus){
    self.keyboardMode = true;
    var key = e.keyCode;

    if(key == 38 || key == 40 || key == 32){
    e.preventDefault(); ){
    self.focusIndex--
    self.focusIndex = self.focusIndex < 0 ? self.$items.length - 1 : self.focusIndex
    } else if(key == 40){
    self.focusIndex++
    self .focusIndex = self.focusIndex > self.$items.length - 1 ? 0 : self.focusIndex };
    self.open() }; .removeClass('focus').eq(self.focusIndex).addClass('focus');
    if(self.cutOff){
    self.query =
    }; ;




    回复讨论(解决方案)

    パート2:
    if(self.down){
    if(key == 9 || key == 27){
    self.close();
    } else if(key == 13){
    e.preventDefault();
    self.select(self.focusIndex);
    self.close();
    false を返します。
    } else if(key == 8){
    e.preventDefault();
    self.query = self.query.slice(0,-1);
    self.search();
    clearTimeout(self.resetQuery);
    false を返します。
    } else if(key != 38 && key != 40){
    var letter = String.fromCharCode(key);
    self.query += 文字;
    self.search();
    clearTimeout(self.resetQuery);
    };
    };
    };
    },
    'keyup.easyDropDown': function(){
    self.resetQuery = setTimeout(function(){
    self.query = '';
    },1200);
    }
    });

    self.$dropDown.on('scroll.easyDropDown',function(e){
    if(self.$dropDown[0].scrollTop >= self.$dropDown[0].scrollHeight - self.maxHeight){
    self.$container.addClass('bottom');
    } else {
    self.$container.removeClass('bottom')
    });

    if(self.$form.length){
    self.$form.on('reset.easyDropDown', function(){
    var active = self.hasLabel ? self.label : self.options[0].title ;
    self.$active.text(アクティブ)
    });
    };
    },

    unbindHandlers: function(){
    var self = this;

    self.$container
    .add(self.$select)
    .add(self.$items)
    .add(self.$form)
    .add(self.$dropDown)
    .off('.easyDropDown' );
    $('body').off('.'+self.id);
    },

    open: function(){
    var self = this,
    scrollTop = window.scrollY || document.documentElement.scrollTop,
    scrollLeft = window.scrollX || document.documentElement.scrollLeft,
    scrollOffset = self.notInViewport(scrollTop);

    self.closeAll();
    self.$select.focus();
    window.scrollTo(scrollLeft, scrollTop+scrollOffset);
    self.$container.addClass('open');
    self.$scrollWrapper.css('height',self.maxHeight+'px');
    self.down = true;
    },

    close: function(){
    var self = this;
    self.$container.removeClass('open');
    self.$scrollWrapper.css('height','0px');
    self.focusIndex = self.selected.index;
    self.query = '';
    self.down = false;
    },

    closeAll: function(){
    var self = this,
    インスタンス = Object.getPrototypeOf(self).instances;
    for(var key in instances){
    var instance = instances[key];
    instance.close();
    };
    },

    select: function(index){
    var self = this;

    if(typeof index === 'string'){
    index = self.$select.find('option[value='+index+']').index() - 1;
    };

    var option = self.options[index],
    selectIndex = self.hasLabel ? インデックス + 1 : インデックス;
    self.$items.removeClass('active').eq(index).addClass('active');
    self.$active.text(option.title);
    self.$select
    .find('option')
    .removeAttr('selected')
    .eq(selectIndex)
    .prop('selected',true)
    .parent()
    .trigger('change') ;

    self.selected = {
    インデックス: インデックス,
    タイトル: option.title
    };
    self.focusIndex = i;
    if(typeof self.onChange === 'function'){
    self.onChange.call(self.$select[0],{
    title: option.title,
    value: option.value
    });
    };
    },

    search: function(){
    var self = this,
    lock = function(i){
    self.focusIndex = i;
    self.$items.removeClass('focus').eq(self.focusIndex).addClass('focus');
    self.scrollToView();
    },
    getTitle = function(i){
    return self.options[i].title.toUpperCase();
    };

    for(i = 0; i < self.options.length; i++){
    var title = getTitle(i);
    if(title.indexOf(self.query) == 0){
    lock(i);
    戻る;
    };
    };

    for(i = 0; i < self.options.length; i++){
    var title = getTitle(i);
    if(title.indexOf(self.query) > -1){
    lock(i);
    休憩;
    };
    };
    },

    scrollToView: function(){
    var self = this;
    if(self.focusIndex >= self.cutOff){
    var $focusItem = self.$items.eq(self.focusIndex),
    スクロール = ($focusItem.outerHeight() * (self.focusIndex + 1)) - self.maxHeight;

    self.$dropDown.scrollTop(スクロール);
    };
    }、

    notinviewport:function(scrolltop){
    var self = this、
    range = {min:scrolltop、
    max:scrolltop+(window.innerheight || document.documentelement.clientheight)、menubottom =}、
    menubottom = self.$dropDown.offset().top + self.maxHeight;

    if(menuBottom >= range.min && menuBottom <= range.max){
    return 0;
    } else {
    return (menuBottom - range.max) + 5;
    };
    },

    destroy: function(){
    var self = this;
    self.unbindHandlers();
    self.$select.unwrap().siblings().remove();
    self.$select.unwrap();
    Object.getPrototypeOf(self).instances[self.$select[0].id] を削除します。
    },

    disable: function(){
    var self = this;
    self.disabled = true;
    self.$container.addClass('disabled');
    self.$select.attr('無効',true);
    if(!self.down)self.close();
    },

    enable: function(){
    var self = this;
    self.disabled = false;
    self.$container.removeClass('disabled');
    self.$select.attr('無効',false);
    }
    };

    var instantiate = function(domNode, settings){
    domNode.id = !domNode.id ? 'EasyDropDown'+rand() : domNode.id;
    var instance = new EasyDropDown();
    if(!instance.instances[domNode.id]){
    instance.instances[domNode.id] = インスタンス;
    instance.init(domNode, 設定);
    };
    },
    rand = function(){
    return ('00000'+(Math.random()*16777216<<0).toString(16)).substr(-6).toUpperCase();
    };

    $.fn.easyDropDown = function(){
    var args = arguments,
    dataReturn = [],
    eachReturn;

    eachReturn = this.each(function(){
    if(args && typeof args[0] === 'string'){
    var data = EasyDropDown.prototype.instances[this.id][args[0]] (args[1], args[2]);
    if(data)dataReturn.push(data);
    インスタンス化(this,
    });

    if(dataReturn.length){
    return dataReturn.length > 1? dataReturn : dataReturn[0];
    } else {
    return eachReturn;
    };
    };

    $(function(){
    if(typeof Object.getPrototypeOf !== 'function'){
    if(typeof 'test'.__proto__ === 'object'){
    Object.getPrototypeOf = function(object){
    return object.__proto__
    };
    } else {
    Object.getPrototypeOf = function(object){
    return object.constructor.prototype
    }; ') .each(function(){
    var json = $(this).attr('data-settings');
    settings = json ? $.parseJSON(json) : {};
    instantiate(this, settings);
    } );
    });
    })(jQuery);



    多忙を期しています...

    これは jquery の easyDropDown 插件、ここにあるプロパティはcutOff、cutOff='10' の话、就は表示 10 行、その他の靠滚動

    按的方法照会実行、処理は成功しました、とても感慨深いです。

    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    最新の問題
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート