Några minuter före pausvilan sköt Lionel Messi 1-0 för hemmalaget på Camp Nou. Men direkt efter paus kvitterade Villarreal genom Manu Trigueros efter en felpass från Luis Suarez som öppnade skottläget. Och målvakten Marc-André Ter Stegen borde definitivt ha kunnat boxa undan avslutet som satt ganska mycket mitt på mål, även om det var hårt.
Men Barca revanscherade sig snabbt. Andrés Iniesta väggade med Suarez, innan den förstnämnde av de två slog in 2-1.
Och med timmen spelad nickade Gerard Piqué in 3-1 för Barca på en hörna.
Med 20 minuter kvar att spela fick Barcelona straff och den brände Neymar. Detta efter en tilltrasslad situation där Villarreals backar ansåg att Lionel Messi tagit bollen med handen, men där domslutet föll åt andra hållet istället.
Returen i dubbelmötet spelas 4 mars.
Barcelona: Ter Stegen, Alves, Pique, Mathieu, Alba, Mascherano, Iniesta, Rafinha, Messi, Suarez, Neymar.
Villarreal: Asenjo, Mario, Musacchio, Ruíz, Costa, Jonathan, Pina, Bruno, Cheryshev, Giovani, Vietto