代码之家  ›  专栏  ›  技术社区  ›  Mohamed Elhariry

Phonegap:我如何实现这段代码?

  •  -2
  • Mohamed Elhariry  · 技术社区  · 8 年前

    我发现了这个整洁的动画,我想在Phonegapp应用程序中实现。 http://codepen.io/anon/pen/MKNpOa?editors=0100

    HTML:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Computer World</title>
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        <script type="text/javascript" src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
    
    </head>
    <body>
    
    <h1>Gooey Menu</h1>
    <h2>Using CSS and SVG Filters</h2>
    <h3>By <a href="http://codepen.io/lbebber">Lucas Bebber</a></h3>
    <h4><a href="http://codepen.io/lbebber/pen/LELBEo" target="_blank">Version 1</a> - Version 2 - <a href="http://codepen.io/lbebber/pen/pvwZJp" target="_blank">Version 3</a> - <a href="http://codepen.io/lbebber/pen/rawQKR" target="_blank">Version 4</a></h4>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
    
    <nav class="menu">
      <input type="checkbox" href="#" class="menu-open" name="menu-open" id="menu-open"/>
      <label class="menu-open-button" for="menu-open">
        <span class="hamburger hamburger-1"></span>
        <span class="hamburger hamburger-2"></span>
        <span class="hamburger hamburger-3"></span>
      </label>
    
      <a href="#" class="menu-item"> <i class="fa fa-bar-chart"></i> </a>
      <a href="#" class="menu-item"> <i class="fa fa-plus"></i> </a>
      <a href="#" class="menu-item"> <i class="fa fa-heart"></i> </a>
      <a href="#" class="menu-item"> <i class="fa fa-envelope"></i> </a>
      <a href="#" class="menu-item"> <i class="fa fa-cog"></i> </a>
      <a href="#" class="menu-item"> <i class="fa fa-ellipsis-h"></i> </a>
    
    </nav>
    
    
    <!-- filters -->
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
        <defs>
          <filter id="shadowed-goo">
    
              <feGaussianBlur in="SourceGraphic" result="blur" stdDeviation="10" />
              <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 18 -7" result="goo" />
              <feGaussianBlur in="goo" stdDeviation="3" result="shadow" />
              <feColorMatrix in="shadow" mode="matrix" values="0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 1 -0.2" result="shadow" />
              <feOffset in="shadow" dx="1" dy="1" result="shadow" />
              <feComposite in2="shadow" in="goo" result="goo" />
              <feComposite in2="goo" in="SourceGraphic" result="mix" />
          </filter>
          <filter id="goo">
              <feGaussianBlur in="SourceGraphic" result="blur" stdDeviation="10" />
              <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 18 -7" result="goo" />
              <feComposite in2="goo" in="SourceGraphic" result="mix" />
          </filter>
        </defs>
    </svg>
    </body>
    </html>
    

    CSS:

    @import "compass/css3";
    
    //vars
    $fg:#e91e63;
    $bg:#8bc34a;
    $pi:3.14;
    
    //config
    $menu-items:6+1;
    $open-distance:105px;
    $opening-angle:$pi*2;
    
    body{
      background:$bg;
      color:white;
      text-align:center;
    }
    a{
      color:inherit;
    }
    h1, h2, h3, h4{
      margin:0;
      margin-bottom:10px;
      margin-top:10px;
    }
    h1{
      font-size:3em;
    }
    %goo{
      filter:url('#goo');
      // debug 
      // background:rgba(255,0,0,0.2);
    }
    %ball{
      background:$fg;
      border-radius:100%;
      width:80px;
      height:80px;
      margin-left:-40px;
      position:absolute;
      top:20px;
      color:white;
      text-align:center;
      line-height:80px;
      transform:translate3d(0,0,0);
      transition:transform ease-out 200ms;
    }
    .menu-open{
      display:none;
    }
    .menu-item{
      @extend %ball;
    }
    .hamburger{
      $width:25px;
      $height:3px;
      width:$width;
      height:$height;
      background:white;
      display:block;
      position:absolute;
      top:50%;
      left:50%;
      margin-left:-$width/2;
      margin-top:-$height/2;
      transition:transform 200ms;
    }
    $hamburger-spacing:8px;
    .hamburger-1{
      transform:translate3d(0,-$hamburger-spacing,0);
    }
    .hamburger-2{
      transform:translate3d(0,0,0);
    }
    .hamburger-3{
      transform:translate3d(0,$hamburger-spacing,0);
    }
    .menu-open:checked+.menu-open-button{
      .hamburger-1{
        transform:translate3d(0,0,0) rotate(45deg); 
      }
      .hamburger-2{
        transform:translate3d(0,0,0) scale(0.1,1);
      }
      .hamburger-3{
        transform:translate3d(0,0,0) rotate(-45deg); 
      }
    }
    .menu{
      @extend %goo;
      $width:380px;
      $height:250px;
      position:absolute;
      left:50%;
      margin-left:-$width/2;
      padding-top:20px;
      padding-left:$width/2;
      width:$width;
      height:$height;
      box-sizing:border-box;
      font-size:20px;
      text-align:left;
    }
    
    
    .menu-item{
      &:hover{
        background:white;
        color:$fg;
      }
      @for $i from 1 through $menu-items{
        &:nth-child(#{$i+2}){
          transition-duration:180ms;
        }
      }
    }
    
    .menu-open-button{
      @extend %ball;
      z-index:2;
      transition-timing-function:cubic-bezier(0.175, 0.885, 0.320, 1.275);
      transition-duration:400ms;
      transform:scale(1.1,1.1) translate3d(0,0,0);
      cursor:pointer;
    }
    .menu-open-button:hover{
      transform:scale(1.2,1.2) translate3d(0,0,0);
    }
    .menu-open:checked+.menu-open-button{
      transition-timing-function:linear;
      transition-duration:200ms;
      transform:scale(0.8,0.8) translate3d(0,0,0);
    }
    
    .menu-open:checked~.menu-item{
      transition-timing-function:cubic-bezier(0.935, 0.000, 0.340, 1.330);
      @for $i from 1 through $menu-items{
        $angle:(($pi - $opening-angle)/2)+(($opening-angle/($menu-items - 1))*($i - 1));
    
        &:nth-child(#{$i+2}){
          transition-duration:80ms+(100ms*$i);
          transform:translate3d(cos($angle)*$open-distance,sin($angle)*$open-distance,0);
        }
      }
    }
    

    我在索引中粘贴了HTML代码。html和索引中的CSS。css,但它似乎不起作用。

    如何实现此代码?

    谢谢

    1 回复  |  直到 8 年前
        1
  •  0
  •   LarsW    8 年前

    您忘记了一件简单的事情:您复制了SCSS,而不是首先将其编译为CSS。因此,这是有效的:

    body {
      background: #8bc34a;
      color: white;
      text-align: center;
    }
    
    a {
      color: inherit;
    }
    
    h1, h2, h3, h4 {
      margin: 0;
      margin-bottom: 10px;
      margin-top: 10px;
    }
    
    h1 {
      font-size: 3em;
    }
    
    .menu {
      -webkit-filter: url("#goo");
              filter: url("#goo");
    }
    
    .menu-item, .menu-open-button {
      background: #e91e63;
      border-radius: 100%;
      width: 80px;
      height: 80px;
      margin-left: -40px;
      position: absolute;
      top: 20px;
      color: white;
      text-align: center;
      line-height: 80px;
      -webkit-transform: translate3d(0, 0, 0);
              transform: translate3d(0, 0, 0);
      -webkit-transition: -webkit-transform ease-out 200ms;
      transition: -webkit-transform ease-out 200ms;
      transition: transform ease-out 200ms;
      transition: transform ease-out 200ms, -webkit-transform ease-out 200ms;
    }
    
    .menu-open {
      display: none;
    }
    
    .hamburger {
      width: 25px;
      height: 3px;
      background: white;
      display: block;
      position: absolute;
      top: 50%;
      left: 50%;
      margin-left: -12.5px;
      margin-top: -1.5px;
      -webkit-transition: -webkit-transform 200ms;
      transition: -webkit-transform 200ms;
      transition: transform 200ms;
      transition: transform 200ms, -webkit-transform 200ms;
    }
    
    .hamburger-1 {
      -webkit-transform: translate3d(0, -8px, 0);
              transform: translate3d(0, -8px, 0);
    }
    
    .hamburger-2 {
      -webkit-transform: translate3d(0, 0, 0);
              transform: translate3d(0, 0, 0);
    }
    
    .hamburger-3 {
      -webkit-transform: translate3d(0, 8px, 0);
              transform: translate3d(0, 8px, 0);
    }
    
    .menu-open:checked + .menu-open-button .hamburger-1 {
      -webkit-transform: translate3d(0, 0, 0) rotate(45deg);
              transform: translate3d(0, 0, 0) rotate(45deg);
    }
    .menu-open:checked + .menu-open-button .hamburger-2 {
      -webkit-transform: translate3d(0, 0, 0) scale(0.1, 1);
              transform: translate3d(0, 0, 0) scale(0.1, 1);
    }
    .menu-open:checked + .menu-open-button .hamburger-3 {
      -webkit-transform: translate3d(0, 0, 0) rotate(-45deg);
              transform: translate3d(0, 0, 0) rotate(-45deg);
    }
    
    .menu {
      position: absolute;
      left: 50%;
      margin-left: -190px;
      padding-top: 20px;
      padding-left: 190px;
      width: 380px;
      height: 250px;
      box-sizing: border-box;
      font-size: 20px;
      text-align: left;
    }
    
    .menu-item:hover {
      background: white;
      color: #e91e63;
    }
    .menu-item:nth-child(3) {
      -webkit-transition-duration: 180ms;
              transition-duration: 180ms;
    }
    .menu-item:nth-child(4) {
      -webkit-transition-duration: 180ms;
              transition-duration: 180ms;
    }
    .menu-item:nth-child(5) {
      -webkit-transition-duration: 180ms;
              transition-duration: 180ms;
    }
    .menu-item:nth-child(6) {
      -webkit-transition-duration: 180ms;
              transition-duration: 180ms;
    }
    .menu-item:nth-child(7) {
      -webkit-transition-duration: 180ms;
              transition-duration: 180ms;
    }
    .menu-item:nth-child(8) {
      -webkit-transition-duration: 180ms;
              transition-duration: 180ms;
    }
    .menu-item:nth-child(9) {
      -webkit-transition-duration: 180ms;
              transition-duration: 180ms;
    }
    
    .menu-open-button {
      z-index: 2;
      -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
              transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
      -webkit-transition-duration: 400ms;
              transition-duration: 400ms;
      -webkit-transform: scale(1.1, 1.1) translate3d(0, 0, 0);
              transform: scale(1.1, 1.1) translate3d(0, 0, 0);
      cursor: pointer;
    }
    
    .menu-open-button:hover {
      -webkit-transform: scale(1.2, 1.2) translate3d(0, 0, 0);
              transform: scale(1.2, 1.2) translate3d(0, 0, 0);
    }
    
    .menu-open:checked + .menu-open-button {
      -webkit-transition-timing-function: linear;
              transition-timing-function: linear;
      -webkit-transition-duration: 200ms;
              transition-duration: 200ms;
      -webkit-transform: scale(0.8, 0.8) translate3d(0, 0, 0);
              transform: scale(0.8, 0.8) translate3d(0, 0, 0);
    }
    
    .menu-open:checked ~ .menu-item {
      -webkit-transition-timing-function: cubic-bezier(0.935, 0, 0.34, 1.33);
              transition-timing-function: cubic-bezier(0.935, 0, 0.34, 1.33);
    }
    .menu-open:checked ~ .menu-item:nth-child(3) {
      -webkit-transition-duration: 180ms;
              transition-duration: 180ms;
      -webkit-transform: translate3d(0.08361px, -104.99997px, 0);
              transform: translate3d(0.08361px, -104.99997px, 0);
    }
    .menu-open:checked ~ .menu-item:nth-child(4) {
      -webkit-transition-duration: 280ms;
              transition-duration: 280ms;
      -webkit-transform: translate3d(90.9466px, -52.47586px, 0);
              transform: translate3d(90.9466px, -52.47586px, 0);
    }
    .menu-open:checked ~ .menu-item:nth-child(5) {
      -webkit-transition-duration: 380ms;
              transition-duration: 380ms;
      -webkit-transform: translate3d(90.9466px, 52.47586px, 0);
              transform: translate3d(90.9466px, 52.47586px, 0);
    }
    .menu-open:checked ~ .menu-item:nth-child(6) {
      -webkit-transition-duration: 480ms;
              transition-duration: 480ms;
      -webkit-transform: translate3d(0.08361px, 104.99997px, 0);
              transform: translate3d(0.08361px, 104.99997px, 0);
    }
    .menu-open:checked ~ .menu-item:nth-child(7) {
      -webkit-transition-duration: 580ms;
              transition-duration: 580ms;
      -webkit-transform: translate3d(-90.86291px, 52.62064px, 0);
              transform: translate3d(-90.86291px, 52.62064px, 0);
    }
    .menu-open:checked ~ .menu-item:nth-child(8) {
      -webkit-transition-duration: 680ms;
              transition-duration: 680ms;
      -webkit-transform: translate3d(-91.03006px, -52.33095px, 0);
              transform: translate3d(-91.03006px, -52.33095px, 0);
    }
    .menu-open:checked ~ .menu-item:nth-child(9) {
      -webkit-transition-duration: 780ms;
              transition-duration: 780ms;
      -webkit-transform: translate3d(-0.25084px, -104.9997px, 0);
              transform: translate3d(-0.25084px, -104.9997px, 0);
    }
    <h1>Gooey Menu</h1>
    <h2>Using CSS and SVG Filters</h2>
    <h3>By <a href="http://codepen.io/lbebber">Lucas Bebber</a></h3>
    <h4><a href="http://codepen.io/lbebber/pen/LELBEo" target="_blank">Version 1</a> - Version 2 - <a href="http://codepen.io/lbebber/pen/pvwZJp" target="_blank">Version 3</a> - <a href="http://codepen.io/lbebber/pen/rawQKR" target="_blank">Version 4</a></h4>
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
    
    <nav class="menu">
      <input type="checkbox" href="#" class="menu-open" name="menu-open" id="menu-open"/>
      <label class="menu-open-button" for="menu-open">
        <span class="hamburger hamburger-1"></span>
        <span class="hamburger hamburger-2"></span>
        <span class="hamburger hamburger-3"></span>
      </label>
      
      <a href="#" class="menu-item"> <i class="fa fa-bar-chart"></i> </a>
      <a href="#" class="menu-item"> <i class="fa fa-plus"></i> </a>
      <a href="#" class="menu-item"> <i class="fa fa-heart"></i> </a>
      <a href="#" class="menu-item"> <i class="fa fa-envelope"></i> </a>
      <a href="#" class="menu-item"> <i class="fa fa-cog"></i> </a>
      <a href="#" class="menu-item"> <i class="fa fa-ellipsis-h"></i> </a>
      
    </nav>
    
    
    <!-- filters -->
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
        <defs>
          <filter id="shadowed-goo">
              
              <feGaussianBlur in="SourceGraphic" result="blur" stdDeviation="10" />
              <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 18 -7" result="goo" />
              <feGaussianBlur in="goo" stdDeviation="3" result="shadow" />
              <feColorMatrix in="shadow" mode="matrix" values="0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 1 -0.2" result="shadow" />
              <feOffset in="shadow" dx="1" dy="1" result="shadow" />
              <feComposite in2="shadow" in="goo" result="goo" />
              <feComposite in2="goo" in="SourceGraphic" result="mix" />
          </filter>
          <filter id="goo">
              <feGaussianBlur in="SourceGraphic" result="blur" stdDeviation="10" />
              <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 18 -7" result="goo" />
              <feComposite in2="goo" in="SourceGraphic" result="mix" />
          </filter>
        </defs>
    </svg>