Страницы

Поиск по вопросам

воскресенье, 2 июня 2019 г.

Эффект покачивания

Как сделать эффект покачивания на jquery или css как здесь при наведении на опцию http://www.bestprogramminglanguagefor.me/q ?


Ответ

*{ padding: 0; margin: 0; } .block{ position: relative; } .circle{ width: 100px; height: 100px; background: #ccc; border-radius: 50%; margin: 0; position: absolute; top: 0; left: 50%; margin-left: -50px; } .block:hover .circle{ position: absolute; top: 0; -webkit-animation: anim 4s infinite; animation: anim 4s infinite; } @-webkit-keyframes anim { 0% { top: 0; left: 50%; } 50% { top: 40px; left: 50%;} 100% { top: 0; left: 50%;} } @keyframes anim { 0% { top: 0; left: 50%; } 50% { top: 40px; left: 50%;} 100% { top: 0; left: 50%;} }


Как упростить код Jquery

Народ, посоветуйте плиз как можно упростить следующий код, сделать его красивым.
$(".qq_80").text("Минимальное количество символов 40. Вы ввели "+count_letters).slideDown(function(){ var t=this; setTimeout(function(){ $(t).slideUp(); }, 3000) });


Ответ

Выстроить в цепочку вызовов в стиле jQuery. Для задержки дальнейшего выполнения вместо setTimeout() можно использовать родной .delay() от jQuery:
var $el = $(".qq_80") ,count_letters = 12 ,txt = "Минимальное количество символов 40. Вы ввели " + count_letters ; $el.text(txt).hide().slideDown().delay(3e3).slideUp();

Ololo

Наследование с вложенными классами

class SinglyLinkedList extends AbstractList { protected Node first; protected Node last; protected int size;
static class Node { Node next; Object val;
Node(Node next, Object val) { this.next = next; this.val = val; }
Node() { this.next = null; this.val = null; } }
Я собираюсь от односвязного списка унаследовать двусвязный список, при этом в вложенном классе, который будет находиться в DoublyLinkedList должно быть ещё одно поле и соответственно конструктор.
public class DoublyLinkedList extends SinglyLinkedList { static class Node extends SinglyLinkedList.Node { Node prev;
Node(Node next, Object val, Node prev) { super(next, val); this.prev = prev; } }
Уверен, что делаю это не правильно.


Ответ

Правильно будет вынести общую логику списков в абстрактный класс и унаследовать от него оба списка. Если Node хранит только состояние, то пусть он будет отличаться в реализациях списка. Либо его можно вынести в protected / package-private классы, для того чтобы была видимость только внутри пакета.
Статические внутренние классы не нарушают SOLID, с их помощью обычно выполняют логическую группировку сущностей внутри класса. В вашем случае плохо то, что вы усложняете дизайн, что сопряжено в последующей тестируемостью и расширяемостью кода, не извлекая при этом никакой практической пользы.
Примеры из JDK:
AbstractSequentialList LinkedList

Как правильно включить сжатие файлов?

Как правильно настроить gzip в Apache?
Для чего нужна эта конструкция - IfModule mod_deflate.c? Что выполняет этот пункт - BrowserMatch?
Настройка в .htaccess

Так?
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4.0[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html
или просто так?
AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript


Ответ

Для чего нужна эта конструкция - IfModule mod_deflate.c?
Проверяет, активирован ли необходимый модуль mod_deflate
Что выполняет этот пункт - BrowserMatch
Позволяет задать поведение на основе заголовка user-agent. Используется для установки env-переменных, которые использует Apache.
Как правильно прописать настройки?
Использовать комбинацию из двух процитированных вариантов. Раз уж в первом варианте делается проверка одного из используемых модулей, пусть делается проверка и для второго.
AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Данный фрагмент файла .htaccess проверяет наличие модуля mod_deflate и, если он доступен, включает сжатие для перечисленных типов файлов. После этого идет проверка наличие модуля mod_setenvif и, если он доступен, изменяются параметры сжатия для некоторых браузеров, которые некорректно обрабатывают сжатые файлы.

Как получить координаты центра отображаемой Google-карты?

При загрузке страницы на карте после определения геолокации (html5) появляется маркер.
Задача: после того, как он появился, при перетягивании карты он должен постоянно быть в центре (т.е. карта перетаскивается, а этот маркер всё время остаётся в центре).


Ответ

Вы можете вызвать: map.getCenter()это вернет вам объект содержаний Lon,Lat.
А вот так можно получить координаты по нажатию правой кнопки мыши:
google.maps.event.addListener(map, "rightclick", function(event) { var lat = event.latLng.lat(); var lng = event.latLng.lng(); ... });

Приложение не запускается

Уже 3 дня мучаюсь... Я создавал табы отдельно и recyclerView отдельно, теперь обьединил. Запускаю не запускается Unfortunately!!! В чем может быть проблема?
MainActivity:
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar; private TabLayout tabLayout; private ViewPager viewPager;
private int[] tabIcons = { R.drawable.ic_action_person, R.drawable.ic_action_group, R.drawable.ic_action_call };
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
viewPager = (ViewPager) findViewById(R.id.viewpager); setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tablayout); tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(new TabOneFragment(), "One"); adapter.addFragment(new TabTwoFragment(), "Two"); adapter.addFragment(new TabThreeFragment(), "Three"); viewPager.setAdapter(adapter);
} }
TabOneFragment:
public class TabOneFragment extends Fragment {
private RecyclerView recyclerview;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); }
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tab_one_fragment, container, false);
recyclerview = (RecyclerView)view.findViewById(R.id.recyclerview); LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); recyclerview.setLayoutManager(layoutManager);
return view; }
@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState);
ArrayList items = new ArrayList<>();
RVAdapter adapter = new RVAdapter(items); recyclerview.setAdapter(adapter);
}
}
RVAdapter:
public class RVAdapter extends RecyclerView.Adapter {
private List mItems;
public RVAdapter(List mItems) { this.mItems = mItems;
}
public class ItemViewHolder extends RecyclerView.ViewHolder {
TextView departCode; TextView departTime; TextView departDate; TextView arriveCode; TextView arriveTime; TextView arriveDate; TextView flyTime; Button ticketPrice; ImageView airlineLogo;
public ItemViewHolder(View itemView) { super(itemView);
departCode = (TextView) itemView.findViewById(R.id.tvAirCodeDepart); departTime = (TextView) itemView.findViewById(R.id.tvDepartTime); departDate = (TextView) itemView.findViewById(R.id.tvDepartDate); arriveCode = (TextView) itemView.findViewById(R.id.tvCodeArrive); arriveTime = (TextView) itemView.findViewById(R.id.tvArriveTime); arriveDate = (TextView) itemView.findViewById(R.id.tvArriveDate); flyTime = (TextView) itemView.findViewById(R.id.tvTime); ticketPrice = (Button) itemView.findViewById(R.id.btnTickPrice); airlineLogo = (ImageView) itemView.findViewById(R.id.ivAirlineLogo); } }
@Override public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) {
itemViewHolder.departCode.setText(mItems.get(i).getDepartCode()); itemViewHolder.departTime.setText(mItems.get(i).getDepartTime()); itemViewHolder.departDate.setText(mItems.get(i).getDepartDate()); itemViewHolder.arriveCode.setText(mItems.get(i).getArriveCode()); itemViewHolder.arriveTime.setText(mItems.get(i).getArriveTime()); itemViewHolder.arriveDate.setText(mItems.get(i).getArriveDate()); itemViewHolder.flyTime.setText(mItems.get(i).getFlyTime()); itemViewHolder.ticketPrice.setText(mItems.get(i).getTicketPrice()); itemViewHolder.airlineLogo.setImageResource(mItems.get(i).getAirlineLogo()); }
@Override public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row, viewGroup, false); return new ItemViewHolder(view); }
@Override public int getItemCount() { return mItems.size(); } }
TicketsObjects
public class TicketObjects {
private String departCode; private String departTime; private String departDate; private String arriveCode; private String arriveTime; private String arriveDate; private String flyTime; private String ticketPrice; private int airlineLogo;
public TicketObjects(String departCode, String departTime, String departDate, String arriveCode, String arriveTime, String arriveDate, String flyTime, String ticketPrice, int airlineLogo) {
this.departCode = departCode; this.departTime = departTime; this.departDate = departDate; this.arriveCode = arriveCode; this.arriveTime = arriveTime; this.arriveDate = arriveDate; this.flyTime = flyTime; this.ticketPrice = ticketPrice; this.airlineLogo = airlineLogo; }
public String getDepartCode(){ return departCode; }
public void setDepartCode(String departCode){ this.departCode = departCode; }
public String getDepartTime(){ return departTime; }
public void setDepartTime(String departTime){ this.departTime = departTime; }
public String getDepartDate(){ return departDate; }
public void setDepartDate(String departDate){ this.departDate = departDate; }
public String getArriveCode(){ return arriveCode; }
public void setArriveCode(String arriveCode){ this.arriveCode = arriveCode; }
public String getArriveTime(){ return arriveTime; }
public void setArriveTime(String arriveTime){ this.arriveTime = arriveTime; }
public String getArriveDate(){ return arriveDate; }
public void setArriveDate(String arriveDate){ this.arriveDate = arriveDate; }
public String getFlyTime(){ return flyTime; }
public void setFlyTime(String flyTime){ this.flyTime = flyTime; }
public String getTicketPrice(){ return ticketPrice; }
public void setTicketPrice(String ticketPrice){ this.ticketPrice = ticketPrice; }
public int getAirlineLogo(){ return airlineLogo; }
public void setAirlineLogo(int airlineLogo){ this.airlineLogo = airlineLogo; }
}
Error:
.recyclerview.MainActivity}: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.


Ответ

Нашел ответ, твой ответ оказывается был близок...

Используются ли в современных веб-проектах Basic и Digest аутентификации?

Я в них не сильно разбираюсь, поэтому мое мало информированное мнение пока стоит на позиции, что они почти никогда не пригодятся, и если нужно будет создавать легкий или средний веб-проект, то алгоритм аутентификации и авторизации пользователей и админов будет целиком на плечах веб-разработчика, и скорее всего так все делают?


Ответ

Для начала, давайте разберемся как работают перечисленные вами механизмы аутентификации.
При HTTP Basic аутентификации вместе с каждым HTTP запросом вместе с заголовками передается связка логин/пароль, которые позволяют однозначно аутентифицировать пользователя.
HTTP Digest аутентификация похожа на HTTP Basic, но вместо связки логин/пароль передается контрольная сумма, вычисленная на основе параметров запроса (метода, URI, иногда тела запроса), логина, пароля и, возможно, еще нескольких дополнительных параметров. (Часто используется уникальный для каждого запроса параметр nonce, препятствующий выполнению атаки на повторение запросов.)
Если говорить о других типах аутентификации, то чаще всего web-приложения используют аутентификацию на базе Cookie. Пользователь передает логин/пароль на сервер, сервер проверяет эти данные и в случае успеха отдает пользователю заголовок Set-Cookie с идентификатором пользовательского сеанса. При всех последующих запросах пользователь передает посредством Cookie этот идентификатор, который и используется для аутентификации.
Принципиальная разница между первыми двумя методами и последним заключается в том, что для механизмов HTTP Basic и HTTP Digest серверу не нужно хранить сессионные данные пользователей (идентификатор пользовательской сессии). При таком подходе, каждый HTTP запрос содержит всю необходимую для построения ответа информацию и может быть изолирован от предыдущих/последующих запросов.
Идея сервера, не хранящего состояние пользовательских сессий лежит в основе довольно популярного RESTful подхода. Этот подход часто используется для построения серверного API.
И да, говорить, что HTTP Basic/Digest не используется в современных web-проектах -- неверно. Тут все зависит от сложности, целей и задач проекта.
Замечание:
Важно понимать разницу между аутентификацией и авторизацией
Под аутентификацией обычно понимают процесс определения того, что пользователь является именно тем, кем он представился. Под авторизацией обычно понимают проверку полномочий конкретного, уже аутентифицированного, пользователя на выполнение некоторых действий в системе.
Выше были указаны только методы аутентификации. Построение правильного механизма авторизации пользователей все равно лежит на плечах разработчика.