как сделать вертикальную кнопку на веб-странице - PullRequest
4 голосов
/ 16 марта 2010

Может кто-нибудь объяснить, как кодировать кнопку обратной связи, которую можно увидеть на foursquare.com? Это вертикальная кнопка на боковой стороне веб-страницы, которая открывает новое окно и затемняет фон. Я видел это и на некоторых других сайтах. Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 16 марта 2010

Как они это сделали ...

Кнопка предоставляется через сервис http://getsatisfaction.com. Этот сервис аналогичен другим сервисам, таким как http://sharethis.com, которые существуют для минимизации программирования, необходимого для создания полноценного веб-сайта. По сути, вы настраиваете учетную запись (я предполагаю ...), и они предоставляют вам кодовый блок javascript, который вы включаете в свои проекты, в результате чего на вашем сайте появляется вертикальная кнопка.

Сделай сам ...

Это не будет так сложно сделать самому. Я быстро разработал пример jQuery. Предположим, у нас есть следующая разметка:

<div id="feedback">
  <p>Here is where you would have your form.</p>
  <div class="toggler">?</div>
</div>

.toggler будет нашей кнопкой в ​​этом случае. Мы хотим разместить его вне поля обратной связи с некоторыми css, а также поместить поле обратной связи с некоторыми css:

#feedback { position:absolute; left:0; width:200px; padding:10px; 
            background:red; color:white; }
.toggler  { width:25px; height:50%; color:white; background:blue; 
            text-align:center; position:absolute; top:25%; 
            right:-25px; cursor:pointer }

Это можно немного убрать. Но теперь, когда у нас есть наши элементы, мы можем добавить некоторую логику переключения с помощью jQuery:

$(function(){
  // When the user clicks on .toggler
  $(".toggler").click(function(e){
    // Get a reference to our feedback box
    var feedback = $("#feedback");
    // If it's in the process of being opened (or is opened)
    if ( $(feedback).hasClass("opened") ) {
      // Close it
      $(feedback)
        .removeClass("opened")
        .animate({"left":0}, 1000);
    } else {
      // Else, Open it
      $(feedback)
        .addClass("opened")
        .animate({"left":-$(feedback).outerWidth()}, 1000);
    }
  });
});

Онлайн демо: http://jsbin.com/iyenu4

2 голосов
/ 16 марта 2010

Взгляните на jquery и библиотеку javascript пользовательского интерфейса jquery для реализации таких интерактивных функций.

Вот пример: http://wpaoli.building58.com/2009/08/jquery-animated-feedback-tab-thingy/

1 голос
/ 16 марта 2010

Похоже, они используют модальное диалоговое окно Lift для затемнения всплывающего окна и фона.

0 голосов
/ 16 марта 2010

Кнопка, вероятно, позиционируется с использованием фиксированного позиционирования CSS. Фиксированное позиционирование означает, что оно остается на том же месте на экране, а не на странице. Это позволяет ему «плавать» над текстом даже при прокрутке.

Всплывающий диалог такой же. Нажатие на кнопку переключает свойство display CSS между none и чем-то отличным от none, возможно block.

Серый фон, я думаю, создается с большой фиксированной позицией <div> с width:100% и height:100% и некоторой непрозрачностью .

Попробуйте это:

HTML

Сохранить как example.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" >
<head>
    <title>Example</title>
    <link rel="stylesheet" href="example.css" type="text/css" />
    <script type="text/javascript" src="example.js"></script>
</head>
<body>
    <h1>Example</h1>
    <a id="clickhere">Click here for the popup!</a>
    <div id="main">

        <p>
            Lorem ipsum dolor sit amet
        </p>
    </div>

    <form id="popup" class="dialog" action="#">
        <div id="popupbackground"></div>
        <div class="dialog">
            <h2>Popup!</h2>
            <a id="closepopup">Click here to close this dialog</a>
        </div>
    </form>
</body>
</html>

CSS

Сохранить как example.css:

html {
    height:100%;
}

body {
    height:100%;
}
form.dialog {
    height:100%;
    width:100%;
    position:fixed;
    top:0px;
    left:0px;
    text-align:center;
    padding-top:10%;
    display:none;
}
form.dialog div.dialog {
    width:400px;
    background-color:gray;
    margin:auto;
    text-align:left;
    border:2px solid black;
    padding:10px;
    position:relative;
    z-index:10;
}
form.dialog label {
    display:block;
}
form.dialog input {
    width:99%;
}
form.dialog textarea {
    width:99%;
    height:200px;
}
a {
    cursor:pointer;
    text-decoration:underline;
    font-weight:bold;
}
#popup #popupbackground {
    background:gray;
    opacity:0.4;
    filter:alpha(opacity=40);
    position:absolute;
    top:0px;
    left:0px;
    height:100%;
    width:100%;
}

JavaScript

Сохранить как example.js:

window.onload = function() {
    document.getElementById("clickhere").onclick = function() {
        document.getElementById("popup").style.display = "block";
    };

    document.getElementById("closepopup").onclick = function() {
        document.getElementById("popup").style.display = "none";
    };

};

Идея в том, что <form> потребляет весь экран из-за width и height свойства в правиле form.dialog. Поскольку в этом правиле также указана фиксированная позиция, пользователь никогда не сможет прокрутить содержимое этого <form>. Затем мы можем центрировать <div class="dialog">, используя margin:auto, чтобы он плавал по центру страницы. <div id="popupbackground"></div> обеспечивает блеклый серый фон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...