web-dev-qa-db-ja.com

マテリアライズドロップダウンが機能しない

マテリアライズを使用してサイドバー内にドロップダウンメニューを作成しようとしていますが、機能しません。ドロップダウンの幅はトリガーと同じではなく、パディングによってアンカーがリストアイテムの一番下に移動します。 (コードはドキュメントのWebサイトと同じです)

問題のあるCodepenは次のとおりです。

助けてくれてありがとう :)

$(document).ready(function(){
      
      // Sidebar
      $(".button-collapse").sideNav({menuWidth: 320, activationWidth: 70, Edge: 'left'});
      // Dropdown
      $('.dropdown-button').dropdown({
           inDuration: 300,
           outDuration: 225,
           constrain_width: false, // Does not change width of dropdown to that of the activator
           hover: false, // Activate on hover
           Gutter: 0, // Spacing from Edge
           belowOrigin: false // Displays dropdown below the button
           }
      );
    });
<div id="slide-out" class="side-nav full">
  <ul>
      <li><a href="#">First Link</span></a></li>
      <li><a href="#">Second Link</span></a></li>
      <!-- Dropdown Trigger -->
      <li><a class='dropdown-button' href='#' data-activates='dropdown1'>Drop Me!</a></li>
  </ul>
</div>

<ul id='dropdown1' class='dropdown-content'>
    <li><a href="#!">one</a></li>
    <li><a href="#!">two</a></li>
    <li class="divider"></li>
    <li><a href="#!">three</a></li>
</ul>

<div class="row">
  <a href="#" data-activates="slide-out" class="button-collapse"><i class="mdi-navigation-menu medium black-text left"></i></a>
</div>
6
filippo90

constraint_width = trueを設定するか、jsonオブジェクトを渡さずにドロップダウンを初期化することができます。

$('.dropdown-button').dropdown({
           inDuration: 300,
           outDuration: 225,
           constrain_width: true, 
           hover: false, 
           Gutter: 0, 
           belowOrigin: false 
           }
      );

または、ドロップダウンをデフォルトで初期化することもできます(ちなみに、上記のjsonオブジェクトがデフォルトのドロップダウン値です)。

$('.dropdown-button').dropdown();
3
nexuscreator

同様の問題を抱えている人のために:jQuery 3.xベータ版を使用していたため、同様の問題が発生しました。 2.2.2に切り替えて、問題はありません。アニメーションメカニズムのいくつかの変更のようです。

これが誰かに役立つことを願っています。

4
Andrew Dunai

同じ状況に直面した後、私は別のJqueryメソッドを使用して解決策を見つけました:

$(".dropdown-trigger").dropdown();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/js/materialize.min.js"></script>

<ul id="dropdown1" class="dropdown-content">
  <li><a href="#!">one</a></li>
  <li><a href="#!">two</a></li>
  <li class="divider"></li>
  <li><a href="#!">three</a></li>
</ul>
<nav>
  <div class="nav-wrapper">
   
    <ul class="left ">
      <!-- Dropdown Trigger -->
      <li><a class="dropdown-trigger" href="#!" data-target="dropdown1">Dropdown</a></li>
    </ul>
  </div>
</nav>

ソリューションのソース

1
Marlon da Veiga

プロジェクトでbootstrap)を使用する場合は、サイトでmaterialize.js after bootstrap.jsをバインドします。これは私にとってはうまくいきます。

1
Serg

私のプロジェクトでは、このエラーはbootstrap.jsが原因で発生しました。それへの参照を削除するだけで、正常に機能します。

<!-- Kindly be well advised there is nothing wrong with the code provided with regard to the subject. 

ただし、マイナーなHTMLタグ(「スパンタグ」)の使用違反と欠落しているタグがあります。さらに、CDNソースタグのリンクは時系列に並べる必要があります。以下を参照してください。これはあなたの部分からのコピー/貼り付けだったと思います。 :)それでも、コードは常に整頓され、クリーンで、整形式に保たれ、HTMLの「正しいドキュメントタイプを使用する」コーディング規約を尊重してください。常にドキュメントタイプをドキュメントの最初の行として宣言してください:->

<!DOCTYPE html>
<html lang="en-US">

<!--

言語の宣言は、アクセシビリティアプリケーション(スクリーンリーダー)と検索エンジンにとって重要です。ただし、htmlタグとbodyタグを省略することはお勧めしません。 htmlタグまたはbodyタグを省略すると、DOMおよびXMLソフトウェアがクラッシュする可能性があります。 bodyタグを省略すると、古いブラウザー(IE9)でもエラーが発生する可能性があります。

HTML5では、headタグを省略できます。デフォルトでは、ブラウザはbodyタグの前にあるすべての要素をデフォルトのheadtags要素に追加します。 headタグを省略することで、HTMLの複雑さを軽減できます。

ナビゲーションリンクのセットは、bodyタグの前にあります:->

<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>

<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="https://google.github.io/material-design-icons/">

<!--Import Boostrap Icon Font-->
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/1.1.34/css/materialdesignicons.min.css"> 

<!--Import materialize.css-->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css">
<title>Materialize Dropdown List </title>

<body>
<!-- Page Content goes here, <div> tags, <ul> tags, <li> tags and <main> tags which specify the main content of a document-->

<!-- Slide-Out Structure -->
<ul id="slide-out" class="sidenav">
<li>
<div class="user-view">
    <div class="background">
        <i class="mdi mdi-office small"></i>
    </div>
        <a href="#user"><img class="circle" src="https://www.directlink.coop/img/icons/avatars/145841-avatar-set/png/boy-1.png"></a>
        <a href="#name"><span class="black-text name">HappyCoder</span></a>
        <a href="#email"><span class="black-text email">[email protected]</span></a>
</div>
</li>
    <li><a href="#!"><i class="material-icons">cloud</i>MyCloud data vault</a></li>
    <!-- Dropdown Trigger -->
    <li><a href='#' data-target='dropdown1' class='dropdown-trigger'>Drop Me!</a></li>
    <li><div class="divider"></div></li>
    <li><a class="subheader">Admin</a></li>
    <li><a class="waves-effect" href="#!">Bitcoin Expenses</a></li>
</ul>

<!-- Dropdown Structure -->
<ul id='dropdown1' class='dropdown-content'>
    <li><a href="#!">one</a></li>
    <li><a href="#!">two</a></li>
    <li class="divider"></li>
    <li><a href="#!">If this has helped you in any way, you know what to do.</a></li>
</ul>
<!-- Slide-Out Trigger -->
<div class="row">
<a href="#" data-target="slide-out" class="sidenav-trigger"><i class="mdi mdi-menu medium black-text left"></i></a>
</div>

<!--Main layout-->
<main>
</main>

<!-- Optional JavaScript -->
<!-- Arrange the jQuery first, then Bootstrap JS, and then the materialize JS chronologically using latest versions -->
<script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/js/materialize.min.js"></script>

<!-- The traditional method of initializing JQuery, compatible with most browser -->
<script>
$(document).ready(function(){
    //Sidebar
  $('.sidenav').sidenav({menuWidth: 320, inDuration: 700, outDuration: 225, activationWidth: 70, Edge: 'right'});
    // Dropdown
        $('.dropdown-trigger').dropdown({
           inDuration: 300,
           outDuration: 225,
           constrain_width: false, // Does not change width of dropdown to that of the activator
           hover: false, // Activate on hover
           Gutter: 0, // Spacing from Edge
           belowOrigin: false // Displays dropdown below the button
        });
  });
</script>
</body>
</hmtl>
        <!-- Close All HTML Elements 
        **BAD**: </span>
        **Good**: <span>/span> -->
0
I'am